"use strict"
const create = () => {
    const input = require("fs").readFileSync("/dev/stdin", "utf8").trim().split("\n");
    const res = {
        "list": input, "index": 0, "max": input.length,
        "hasNext": function() {return this.index < this.max},
        "next": function() { if (!this.hasNext()) {throw "ArrayIndexOutOfBoundsException";}else{return this.list[this.index++];}}
    };
    return res;
}
const o = create();
const next = () => o.next()
const nextInt = () => parseInt(o.next())
const nextStrArray = () => o.next().split(" ")
const nextIntArray = () => o.next().split(" ").map(el => parseInt(el))
const nextCharArray = () => o.next().split("")
const hasNext = () => o.hasNext()
const myout = (...x) => console.log(...x)

const find = (tmp, lastIdx) => {
    if(lastIdx == 0){
        lastIdx = tmp.length-1
    }
    let curr = Math.min(tmp[lastIdx], tmp[lastIdx-1])
    let prev = Math.min(tmp[lastIdx-1], tmp[lastIdx-2])
    if(curr < prev){
        return lastIdx-1 
    } else {
        return lastIdx
    } 
}

const count = (tmp, idx) => {
    let ans
    if(idx == 0){
        ans = Math.min(tmp[0], tmp[tmp.length-1])
    }else if (idx == tmp.lentgh-1){
        ans = Math.min(tmp[0], tmp[tmp.length-1])
    } else {
        ans = Math.min(tmp[idx-1], tmp[idx+1])
    }
    return ans
}

const Main = () => {
    let n = nextInt()
    let a = nextIntArray()
    a.sort((a,b)=> b-a)
    let ans = 0
    if(n <= 3){
        for(let i = 0; i<a.length-1; i++){
            ans += a[i]
        }
        console.log(ans)
        return
    }
    let pos = 3
    let tmp = [a[0], a[1], a[2]]
    ans = a[0] + a[1]
    let lastIdx = tmp.length-1
    while(pos< a.length){
        let idx = find(tmp, lastIdx)
        tmp.splice(idx, 0, a[pos])
        let cnt = count(tmp,idx)
        ans += cnt
        pos++
        lastIdx = idx
    }
    console.log(ans)
}
Main()
