#include<bits/stdc++.h>
using namespace std;
struct priority_queue_private
{
int head=1;
long long num[100000];
};
void swap_of_two(long long *A,long long *B)
{
long long tmp;
tmp=*A;
*A=*B;
*B=tmp;
}
void push_number(priority_queue_private *Q,long long number)
{
(*Q).num[(*Q).head]=number;
(*Q).head+=1;
int now=(*Q).head-1;
while(now>1)
{
if(now%2==0)
{
if((*Q).num[now]<(*Q).num[now/2])
{
swap_of_two(&((*Q).num[now]),&((*Q).num[now/2]));
now=now/2;
}
else break;
}
else
{
if((*Q).num[now]<(*Q).num[now/2])
{
swap_of_two(&((*Q).num[now]),&((*Q).num[now/2]));
now/=2;
}
else break;
}
}
}
long long pop_first(priority_queue_private* Q)
{
long long num=(*Q).num[1];
(*Q).head--;
(*Q).num[1]=(*Q).num[(*Q).head];
(*Q).num[(*Q).head]=2^31;
int now=1;
while(now<(*Q).head)
{
if((*Q).num[now*2+1]>(*Q).num[now*2])
{
swap_of_two(&((*Q).num[now]),&((*Q).num[now*2]));
now=now*2;
continue;
}
else
{
swap_of_two(&((*Q).num[now]),&((*Q).num[now*2+1]));
now=now*2+1;
continue;
}
}
return num;
}
int main()
{
freopen("1.in","r",stdin);
priority_queue_private weight;
int N,num;
cin>>N;
memset(weight.num,2^31,sizeof(weight.num));
for(int i=1;i<=N;i++)
{
cin>>num;
push_number(&weight,num);
}
long long answer=0,newweight;
while(weight.head>2)
{
newweight=pop_first(&weight)+pop_first(&weight);
answer+=newweight;
push_number(&weight,newweight);
}
cout<<answer;
return 0;
}