import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        List<MyNode> list = new ArrayList<>();
        for(int i=1;i<=n;i++){
            list.add(new MyNode((long)sc.nextInt()));
        }
        //生成哈夫曼树
        MyNode root = createHFTree(list);        
        System.out.println(getSum(root));
    }
    public static long getSum(MyNode root){
        long sum = 0;
        Queue<MyNode> queue = new LinkedList<>();
        root.depth = 0;
        queue.add(root);
        while(!queue.isEmpty()){
            MyNode node = queue.poll();
            if(node.left!=null){
                node.left.depth = node.depth+1;
                node.right.depth = node.depth+1;
                queue.add(node.left);
                queue.add(node.right);
            }else{
                sum+=node.val*node.depth;
            }
        }
        return sum;


    }
    public static MyNode createHFTree(List<MyNode> list){
        //创建哈夫曼树过程中,每添加一次节点,都要排序一次,就用优先队列(堆排序)
        PriorityQueue<MyNode> queue = new PriorityQueue<>(Comparator.comparingLong(o -> o.val));
        queue.addAll(list);
        while(!queue.isEmpty()){
            MyNode left = queue.poll();
            MyNode right = queue.poll();
            if(right == null) //堆中只有一个节点,那就是根节点
                return left;
            MyNode newNode = new MyNode(left.val+right.val);
            newNode.left = left;
            newNode.right = right;
            queue.add(newNode);

        }
        return null;
    }
}

class MyNode{
    long val;
    long depth;
    MyNode left;
    MyNode right;
    public MyNode(long val){
        this.val = val;
    }

}