#include <stdio.h>
//除了小顶堆,不需要任何其他数据结构
//插入
void HeapInsert(long long* Heap, long long val, int size) {
    Heap[size] = val;
    while (Heap[size] < Heap[(size - 1) / 2]) {
     long long tmp = Heap[size];
        Heap[size] = Heap[(size - 1) / 2];
        Heap[(size - 1) / 2] = tmp;
        size = (size-1)/2;
    }
}
//取出
void HeapPop(long long* Heap, int size) {

    Heap[0] = Heap[size];
    int start = 0;
    int left = 2 * start + 1;
    while (left < size) {
        if (left + 1 < size && Heap[left] > Heap[left + 1]) {
            left = left + 1;
        }
        if (Heap[start] > Heap[left]) {
            long long temp = Heap[start];
            Heap[start] = Heap[left];
            Heap[left] = temp;
            start = left;
            left = 2*start+1;
        }else{
            break;
        }
    }

}
int main() {
    int quality;
    scanf("%d", &quality);
    long long Heap[200001];
    int size = 0;
    for (int i = 0; i < quality; i++) {
        long long tmp ;
        scanf("%lld", &tmp);
        HeapInsert(Heap, tmp, size);
        size++;
    }

//   for(int i = 0;i<quality;i++){
//     printf("%lld ",Heap[i]);
//  }
long long result = 0;
    while (size >= 2) {
        long long val1 = Heap[0];
        HeapPop(Heap, size - 1);
        size--;
        long long val2 = Heap[0];
        HeapPop(Heap, size - 1);
        size--;
        result = val1+val2+result; //原因见图
        long long val3 = val1+val2;
        HeapInsert(Heap, val3, size);
        size++;
	
    }
    printf("%lld",result);
    return 0;
}