#include<iostream>
#include<queue>
using namespace std;

priority_queue<int, vector<int>, greater<int> > p;  //定义小根堆
int main(){
   int n,i,x,y,s=0;
   cin>>n;
   //将赋值的数推入队列
   for(i=1;i<=n;i++){
   		cin>>x;
   		p.push(x);
   }
   for(i=1;i<=n-1;i++){
   		x = p.top();
		p.pop();
		y = p.top();
		p.pop();
		p.push(x+y);
		s = s + x+y;	
   }
   cout<<s;
    return 0;
}

/**************************************************************
	Problem: 1752
	User: admin
	Language: C++
	Result: Accepted
	Time:22 ms
	Memory:2212 kb
****************************************************************/