The reason you got all your values assigned to $sourcefile is that is that your invocation of the mycopyfile function passed only one object to the function:
mycopyfile($sourcefile, $hostlist, $filedestination)
Is equivalent to:
mycopyfile -sourcefile @($sourcefile, $hostlist, $filedestination)
The correct way to invoke the function is:
mycopyfile -sourcefile $sourcefile -hostlist $hostlist -filedestination $filedestination
Or by using positional parameters:
mycopyfile $sourcefile $hostlist $filedestination
You really should consider changing the parameter names to be more consistent with powershell conventions.
I think it is unfortunate that powershell "functions" are declared as functions because they are very clearly not used like functions.