There is no way to represent a negative number in an unsigned integer. Therefore an unsigned multiplier will generate a product as if all 1 bits represent positive 2 to the nth.
Whether the multiplier does it or not based on the most significant bit and an indicator of whether the operand is signed the operands need to be converted to positive format, multiplied then converted to negative at the end if the signs are different.
let's multiply 2 times -7. (0007 -> fff8 + 1 = fff9) ... 0002 * fff9 = 0001fff2 unsigned.
but 2 * 7 = e ... * -1 = 0000fff2 signed. So if you only look at the low 16 bits, they match.
If you extend the sign to 32 bits, then you are multiplying 32 bit integers, which by the way produce 64 bit products.
If your computer is to be a general purpose I think you have the choice to implement the traditional algorithm ... make both operands positive, multiply, and if signs were different, then complement the product, otherwise invent new multipliers which handle both ops negative or either op negative, then select one of the four based upon the sign bits.
I have uploaded a zipped C# project file that has a simple loop to sequence through operand values which may be of interest. (if you have a C# IDE to run it on.