#include <iostream>
#include <stdio.h>
#include <string.h>
#define maxn 20000
using namespace std;
int l[maxn];
int n,h;
long long int minx;
long long int ans;
void heap_sort( int x)//小根堆
{
int lg, lr, t;
while( (x<<1) <= h)
{
lg = x << 1;
lr = ( x << 1) + 1;
if( lr <= h && l[lg] > l[lr])
lg = lr;
if( l[x] > l[lg])
{
t = l[x];
l[x] = l[lg];
l[lg] = t;
x = lg;
}
else
break;
}
return ;
}
int main()
{
int i;
while( 1 == scanf("%d",&n))
{
for( i = 1; i<=n; i++)
scanf("%d",&l[i]);
h = n;
for( i = n/2; i > 0 ; i--)//堆排序
heap_sort(i);
ans = 0;
while( h > 1)//去顶端堆
{
minx = l[1];
l[1] = l[h];
h--;
heap_sort(1);
minx += l[1];
l[1] = minx;
heap_sort(1);
ans += minx;
}
printf("%I64d\n",ans);
}
return 0;
}
#include <stdio.h>
#include <string.h>
#define maxn 20000
using namespace std;
int l[maxn];
int n,h;
long long int minx;
long long int ans;
void heap_sort( int x)//小根堆
{
int lg, lr, t;
while( (x<<1) <= h)
{
lg = x << 1;
lr = ( x << 1) + 1;
if( lr <= h && l[lg] > l[lr])
lg = lr;
if( l[x] > l[lg])
{
t = l[x];
l[x] = l[lg];
l[lg] = t;
x = lg;
}
else
break;
}
return ;
}
int main()
{
int i;
while( 1 == scanf("%d",&n))
{
for( i = 1; i<=n; i++)
scanf("%d",&l[i]);
h = n;
for( i = n/2; i > 0 ; i--)//堆排序
heap_sort(i);
ans = 0;
while( h > 1)//去顶端堆
{
minx = l[1];
l[1] = l[h];
h--;
heap_sort(1);
minx += l[1];
l[1] = minx;
heap_sort(1);
ans += minx;
}
printf("%I64d\n",ans);
}
return 0;
}