I am greater than you!
Python 2, 85 80 77 72 70 bytes
lambda l:''.join(sorted(map(str,l),key=lambda i:i+i[-1]*max(l))[::-1])
Try it online!
Sorts the numbers lexicographically, but each number is padded with its last digit.
This means that 'shorter' numbers (string-wise) can be larger than 'longer' numbers:
Example:
Input: [76, 7]
Each number gets padded with its last digit: ['76666..','7777..']
Sorted (descending): ['7777..',76666..']
, which gives [7, 76]
Joining the result gives: 776
05AB1E, 3 bytes
œJà
Try it online!
Jelly, 4 bytes
Œ!VṀ
Explanation
Input: list [1, 4, 5, 21, 4]
Œ! Generate all permutations of input list
V Eval those lists as Jelly code: every sublist is joined and interpreted as int
Ṁ Pick the highest
Try it online!