#include <bits/stdc++.h>
using namespace std;
#define int long long
#define mp make_pair
#define vi vector<int>
#define ppi pair<int,pi>
#define ld long double
#define pb push_back
#define eb emplace_back
#define F first
#define S second
#define deb(x) cout << #x << "=" << x << endl
#define deb2(x, y) cout << #x << "=" << x << "," << #y << "=" << y << end
#define all(x) x.begin(), x.end()
#define clr(x) memset(x, 0, sizeof(x))
#define tr(it, a) for(auto it = a.begin(); it != a.end(); it++)
#define PI 3.1415926535897932384626
#define f(i, begin, end) for (__typeof(end) i = (begin); i != (end) ; i += 1 - 2 * ((begin) > (end)))
#define nl cout<<"\n";
#define endl "\n"
#define par(a,n) f(i,0,n) cout<<a[i]<<" "; nl
#define vv(n,m) vector <vector <int> > v(n, vector <int> (m));
//void prt(int x) {cerr << x;}
void prt(long x) {cerr << x;}
void prt(long long x) {cerr << x;}
void prt(unsigned x) {cerr << x;}
void prt(unsigned long x) {cerr << x;}
void prt(unsigned long long x) {cerr << x;}
void prt(float x) {cerr << x;}
void prt(double x) {cerr << x;}
void prt(long double x) {cerr << x;}
void prt(char x) {cerr << '\'' << x << '\'';}
void prt(const char *x) {cerr << '\"' << x << '\"';}
void prt(const string &x) {cerr << '\"' << x << '\"';}
void prt(bool x) {cerr << (x ? "true" : "false");}

template<typename T, typename V>
void prt(const pair<T, V> &x) {cerr << '{'; prt(x.first); cerr << ','; prt(x.second); cerr << '}';}
template<typename T>
void prt(const T &x) {int f = 0; cerr << '{'; for (auto &i: x) cerr << (f++ ? "," : ""), prt(i); cerr << "}";}
void _print() {cerr << "]\n";}
template <typename T, typename... V>
void _print(T t, V... v) {prt(t); if (sizeof...(v)) cerr << ", "; _print(v...);}
#ifndef ONLINE_JUDGE
#define debug(x...) cerr << "[" << #x << "] = ["; _print(x)     
#else
#define debug(x...)
#endif

#define er(args...) { string _s = #args; replace(_s.begin(), _s.end(), ',', ' '); stringstream _ss(_s); istream_iterator<string> _it(_ss); err(_it, args); }
void err(istream_iterator<string> it) {}
template<typename T, typename... brgs>
void err(istream_iterator<string> it, T a, brgs... args) {
	cerr << *it << " = " << a << endl;
	err(++it, args...);	
}
#pragma GCC target ("avx2")
#pragma GCC optimization ("O3")
#pragma GCC optimization ("unroll-loops")
typedef pair<int,int> pii;
typedef vector<pii> vpii;
const int mod = 1000000007;
const int N = 3e5;

int kadane(int*a, int n);
bool isPrime(int n);
int mpow(int a, int b);

int cmp(int a, int b){
  return a>b;
}
void solve(){
   int n;
   cin>>n;
   int a[n];
   f(i,0,n) cin>>a[i];
   int c=1;
   int i=1;
   sort(a,a+n,cmp);
   int ans=a[0];
   while(c<n-1){
     if(n-1-c>=2){
       ans+=2*a[i];
       i++;
       c+=2;
     }else{
       ans+=a[i];
       i++;
       c++;
     }
   }
   cout<<ans<<endl;

}

signed main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    // int t;
    // cin>>t;
    // while(t--)
    solve();
        
}

int mpow(int a, int b){ /* pow(a, b) % m */
  int m=mod;
  int x=1;
  while (b>0){
    if (b&1){
      x=(x * a) % m;
    }
    a=(a*a) % m; /* compute the next power of 2 */
    b>>=1; /* this is equivalent to b = floor(b / 2) */
  }
  return x;
}
bool isPrime(int n) 
{ 
    if (n <= 1)  return false; 
    if (n <= 3)  return true; 
    if (n%2 == 0 || n%3 == 0) return false; 
    for (int i=5; i*i<=n; i=i+6) 
        if (n%i == 0 || n%(i+2) == 0) 
           return false; 
    return true; 
} 

int kadane(int*a, int n){
    int max_so_far = INT_MIN, max_ending_here = 0;
    f(i,0,n){
        max_ending_here+=a[i];
        max_so_far = max(max_so_far, max_ending_here);
        if(max_ending_here<0) max_ending_here=0;
    }
    return max_so_far;
}

Measured memory_bytes: 5216