import java.util.PriorityQueue;
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner in = new Scanner(System.in);
while(in.hasNext()){
// solution1(in);
solution2(in);
}
}
/**
* 模拟法: 数组
*
* n=4时
* a b c d
*
* 从前往后
* score = a*b + (a+b)*c + (a+b+c)*d = ab+ac+ad+bc+bd+cd
*
* 从后往前
* score = c*d + (c+d)*b + (b+c+d)*a = ab+ac+ad+bc+bd+cd
*
* 其他情况同理, 不管什么顺序, 结果都一样.
*
* @param in
*/
private static void solution1(Scanner in){
int n = in.nextInt();
int[] w = new int[n];
int sum = 0;
int score = 0;
for(int i=0; i<n; i++){
w[i] = in.nextInt();
if(i > 0){
sum += w[i-1];
score += sum*w[i];
}
}
System.out.println(score);
}
/**
* 模拟法: 最大堆
* @param in
*/
private static void solution2(Scanner in){
int n = in.nextInt();
PriorityQueue<Integer> maxHeap = new PriorityQueue<>((o1, o2) -> o2-o1);
for(int i=1; i<=n; i++){
maxHeap.offer(in.nextInt());
}
int score = 0;
int max1,max2;
while(maxHeap.size() > 1){
max1 = maxHeap.poll();
max2 = maxHeap.poll();
score += max1*max2;
maxHeap.offer(max1+max2);
}
System.out.println(score);
}
}