import sys

# for line in sys.stdin:
#     a = line.split()
#     print(int(a[0]) + int(a[1]))


"""
 哈夫曼编码
 https://blog.csdn.net/xyy1028/article/details/139965597
 
 哈夫曼编码的核心思想: 
 高频字符用短编码 ,低频符号用长编码,从而最小化总编码长度。
算法思路:
1.优先队列(最小堆)
将所有字符的频率存入最小堆,每次取出两个最小的频率合并
直到对重只剩下一个节点。
合并时,记录每次合并的权值之和,这些权值的累加为最小编码长度。
2. 计算最短编码长度
  每次合并两个最小频率a和b ,生成新的节点a+b ,并将a+b 重新
  放入堆中。
  总编码长度=所有非叶子节点的权值之和(每次合并的a+b 的累加)。
示例解析‌
‌输入‌:n = 3,a = [1, 2, 3]
‌步骤‌:
初始堆:[1, 2, 3]
合并 1 和 2 → 3(总长度 +3),堆变为 [3, 3]
合并 3 和 3 → 6(总长度 +6),堆变为 [6]
‌总长度‌ = 3 + 6 = 9(与示例一致)。

复杂度: 
时间复杂度:O(n log n ) 每次堆操作 o(log n)  ,共 n次。
空间复杂度: O(n) 堆存储
关键点‌
‌堆优化‌:直接使用 heapq 模块,避免手动实现堆。
‌贪心策略‌:每次合并最小的两个节点,确保总编码长度最小化。
‌边界情况‌:当 n = 1 时,无需合并,总长度为 0(但题目保证 a_i ≥ 1,故 n ≥ 1 时至少有一个字符)。
"""
import heapq
def solve():
    n =int(input())
    a= list(map(int,input().split()))
    total=0
    heapq.heapify(a)
    while len(a)>1:
        x= heapq.heappop(a)
        y=heapq.heappop(a)
        cost=x+y
        total+=cost
        heapq.heappush(a,cost)
    print(total)

solve()