# 貪欲に大きい順に入れていって，入れる場所はもっとも周りが大きくなる場所

# この方針は正しいただし，値の取り出しだけではなく挿入が起こるので，優先度付きキュー（heap）を使う必要があるっ

N = int(eval(input()))

A = list(map(int,input().split()))

A.sort(reverse=True)

import heapq

C = []

# heapは最小値しか取り出せないことに注意

heapq.heapify(C)

ans = 0

# 初期条件として2つの値を挿入する

heapq.heappush(C,-A[0])

for i in range(1,N):

    tmp = heapq.heappop(C)

    ans += -tmp

    heapq.heappush(C, -A[i])

    heapq.heappush(C, -A[i])

print(ans)









N = int(eval(input()))

A = list(map(int,input().split()))

A.sort(reverse=True)

ans = 0

for i in range(N-1):

    if i == 0:

        ans += A[i]

    else:

        ans += A[1+(i-1)//2]

print(ans)
# 貪欲に大きい順に入れていって，入れる場所はもっとも周りが大きくなる場所
# この方針は正しいただし，値の取り出しだけではなく挿入が起こるので，優先度付きキュー（heap）を使う必要があるっ
N = int(eval(input()))
A = list(map(int, input().split()))
A.sort(reverse=True)
import heapq

C = []
# heapは最小値しか取り出せないことに注意
heapq.heapify(C)
ans = 0
# 初期条件として2つの値を挿入する
heapq.heappush(C, -A[0])
for i in range(1, N):
    tmp = heapq.heappop(C)
    ans += -tmp
    heapq.heappush(C, -A[i])
    heapq.heappush(C, -A[i])
print(ans)

N = int(eval(input()))
A = list(map(int, input().split()))
A.sort(reverse=True)
ans = 0
for i in range(N - 1):
    if i == 0:
        ans += A[i]
    else:
        ans += A[1 + (i - 1) // 2]
print(ans)

-# 貪欲に大きい順に入れていって，入れる場所はもっとも周りが大きくなる場所 -# この方針は正しいただし，値の取り出しだけではなく挿入が起こるので，優先度付きキュー（heap）を使う必要があるっ -import heapq - -C = [] -# heapは最小値しか取り出せないことに注意 -heapq.heapify(C) -# 初期条件として2つの値を挿入する -heapq.heappush(C, -A[0]) -for i in range(1, N): -    tmp = heapq.heappop(C) -    ans += -tmp -    heapq.heappush(C, -A[i]) -    heapq.heappush(C, -A[i]) +for i in range(N - 1): +    if i == 0: +        ans += A[i] +    else: +        ans += A[1 + (i - 1) // 2]