Syntax on Changing return String by Concatenation?
It looks like you're expecting the integer to get implicitly converted to string. What actually happens is the other way around - the string gets implicitly converted to integer.
The simplest version of what you want is:
Select '$' + Cast(dbo.fn_TotalBill('IBM') As Varchar)

But:

You shouldn't use Varchar without a length, it's bad practice. In this case maybe Varchar(16) would do?

You're missing cents. Normal practice would be to use Decimal(16, 2) to store it or perhaps even smaller. Also as per the other answer some people prefer the Money data type because of additional decimal places for rounding purposes that might be useful if compounding interest was involved.

T-SQL isn't going to do proper regional formatting for you (though it turns out 2012 added a way in the other answer).

But above all this generally, and almost certainly, isn't/shouldn't be done in T-SQL. You should always pass raw numerical values to the caller and let them do regional currency conversion for you in the presentation layer. That's where it belongs.
The only exception I've seen is when I've included the figure in an internal error message, for example to give me a figure where the balance is wrong for debugging purposes and this isn't going to flow through to the caller.