package main

import (
	"container/heap"
	"fmt"
)

type Myheap []int
func (m Myheap) Len() int {return len(m)}
func (m Myheap) Swap(i,j int) {m[i], m[j] = m[j], m[i]}
func (m Myheap) Less(i,j int) bool {return m[i]<m[j]}

func (m *Myheap) Push(x interface{}) {
    *m = append(*m, x.(int))
}
func (m *Myheap) Pop() interface{} {
    x := (*m)[len(*m)-1]
    *m = (*m)[:len(*m)-1]
    return x
}
// 贪心策略求解,将整个拆分过程逆向分为合成过程
// 每次将最小的合成,操作次数降到最低,使得最后的成本最小。
func main() {
    num := 0
    for {
        n, _ := fmt.Scan(&num)
        if n == 0 {
            break
        } else {
            arr := make([]int, num)
            for i:=0; i<len(arr); i++ {
                fmt.Scan(&arr[i])
            }

            var myheap Myheap
            for i:=0; i<len(arr); i++ {
                myheap = append(myheap, arr[i])
            }
            heap.Init(&myheap)
            cost := 0
            for len(myheap) > 1 {
                f1 := (heap.Pop(&myheap)).(int)
                f2 := (heap.Pop(&myheap)).(int)
                costsub := f1+f2
                heap.Push(&myheap, costsub)
                cost += costsub
            }
            fmt.Println(cost)
        }
    }
}