#include<cstdio>
#include<queue>
using namespace std;
int main(){
	priority_queue<int> pqueue;//存入相反数
	int n;
	scanf("%d",&n);
	for(int i = 0; i < n; ++i){
		int leaf;
		scanf("%d",&leaf);
		pqueue.push(-leaf);
		}
	int res = 0;//存储带权路径和的中间结果
	while(pqueue.size() > 1){
		int leaf1 = pqueue.top();
		pqueue.pop();
		int leaf2 = pqueue.top();
		pqueue.pop();
		//计算带权路径和
		res = res + leaf1 + leaf2;
		//把构成的新子树插入原集合K中
		pqueue.push(leaf1+leaf2);
		}
	printf("%d\n",-res);//当哈夫曼树构建完成输出结果
	}