#include <stdio.h>
#define N 20000
int count;
int planks[N];
///
int queue[N];
int size;
void push(int n)
{
int i = size++;
while(i > 0)
{
int p = (i - 1) / 2;
if(queue[p] <= n)
{
break;
}
queue[i] = queue[p];
i = p;
}
queue[i] = n;
}
int pop(void)
{
int ret = queue[0];
int x = queue[--size];
int i = 0;
while( (2 * i + 1) < size)
{
int a = 2 * i + 1;
int b = 2 * i + 2;
if( b < size && queue[b] < queue[a])
{
a = b;
}
if( queue[a] >= x)
{
break;
}
queue[i] = queue[a];
i = a;
}
queue[i] = x;
return ret;
}
long long get_minimum(void)
{
int i;
for(i = 0; i < count; i++)
{
push(planks[i]);
}
long long cost = 0;
while( size > 1)
{
int tmp = pop() + pop();
cost += tmp;
push(tmp);
}
return cost;
}
int main(void)
{
// freopen("2.txt", "r", stdin);
scanf("%d", &count);
int i;
for(i = 0; i < count; i++)
{
scanf("%d", &planks[i]);
}
printf("%lld\n", get_minimum());
return 0;
}