快读,但TLE
#include <queue>
#include <iostream>
#include <cstdio>
using namespace std;
int n,x,a,b,num[1000010];
long long int ans,xx,yy;
priority_queue <long long,vector<long long>,greater<long long> >q;
priority_queue <long long,vector<long long>,greater<long long> >p;
long long int cmp(){
long long int x;
if (p.empty()||(!q.empty()&&q.top()<p.top())){
x=q.top();
q.pop();
}
else{
x=p.top();
p.pop();
}
return x;
}
void read(int &x){
x=0;
char c=getchar();
while(c<'0'||c>'9'){
c=getchar();
}
while(c>='0'&&c<='9'){
x=x*10+c-'0';
c=getchar();
}
}
int main(){
cin>>n;
for (int i=0;i<n;i++){
read(x);
num[x]++;
}
for (int i=1;i<=100000;i++){
while(num[i]){
q.push(i);
num[i]--;
}
}
for(int i=0;i<n-1;i++){
xx=cmp();
yy=cmp();
ans+=(xx+yy);
p.push(xx+yy);
}
cout<<ans<<endl;
return 0;
}