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!