#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;
}
