/**************************************************************** 
 * Description: 哈夫曼树
 * Author: Alex Li
 * Date: 2024-08-16 19:31:07
 * LastEditTime: 2024-08-16 19:31:19
****************************************************************/
#include <iostream>
#include <queue>
#include <vector>

using namespace std;

int main() {
    int n;
    cin >> n;
    
    // 使用优先队列(小顶堆)来处理最小的两个元素
    priority_queue<int, vector<int>, greater<int>> pq;
    
    for (int i = 0; i < n; ++i) {
        int num;
        cin >> num;
        pq.push(num);
    }
    
    int totalCost = 0;
    
    while (pq.size() > 1) {
        // 取出最小的两个数
        int first = pq.top(); pq.pop();
        int second = pq.top(); pq.pop();
        
        int cost = first + second;
        totalCost += cost;
        
        // 将它们的和加入优先队列中
        pq.push(cost);
    }
    
    cout << totalCost << endl;
    
    return 0;
}
