#include #include #include #include #include #include #include #include #include #include #include #include #include #include #define all(x) x.begin() , x.end() #define fi first #define se second #define pb push_back #define umax( x , y ) x = max( x , (y) ) #define umin( x , y ) x = min( x , (y) ) #define For( i , a ) for(int i=1;i<=a;i++) #define ort (b+s)/2 #define y2 asrwjaelkf #define y1 asseopirwjaelkf #define set multiset using namespace std; inline int read() { int res = 0 ;int neg ; while(true){char ch = getchar();if(ch>='0' && ch<='9' || ch=='-'){if(ch=='-') neg = -1;else neg = 1 , res = ch-'0';break;} } while(true){char ch = getchar();if(ch>='0' && ch<='9') res*=10 , res+=ch-'0';else break;} return res*neg; } typedef long long Lint; typedef double db; typedef pair ii; typedef pair dd; typedef pair di; typedef pair iii; typedef pair i4; const int maxn = 3000020; const int maxm = 1000020; const int MOd = 1e9 + 7; int a, b; iii used[maxn]; vector v, inv; map mp; int mul( int a, int b ) { return (Lint)a * b % MOd; } int add( int a, int b ) { a += b; if( a >= MOd ) a -= MOd; if( a < 0 ) a += MOd; return a; } int us( int x, Lint y ) { int z = 1; while( y ) { if( y&1 ) z = mul( z, x ); x = mul( x, x ); y >>= 1; } return z; } int calc( int n, Lint k ) { if( n == 1 ) return (k+1) % MOd; return mul( add( us( n, k+1 ), -1 ), us( n-1, MOd-2 ) ); } void solve() { Lint a, b, c; Lint l, r; scanf("%lld %lld %lld %lld %lld",&a,&b,&c,&l,&r); if( !mp.count(iii(ii(a,b),c)) ) assert(0); iii t = mp[iii(ii(a,b),c)]; //printf("asd %d %d %d\n",t.fi.fi,t.fi.se,t.se); int ans = 0; ans = add( ans, calc( t.fi.fi, r ) ); ans = add( ans, -calc( t.fi.fi, l-1 ) ); //printf("-- %d\n",ans); ans = add( ans, calc( t.fi.se, r ) ); ans = add( ans, -calc( t.fi.se, l-1 ) ); //printf("-- %d\n",ans); ans = add( ans, calc( t.se, r ) ); ans = add( ans, -calc( t.se, l-1 ) ); cout << ans << endl; } int main() { //freopen("asd.in.c","r",stdin); //freopen("out.txt","w",stdout); int a; scanf("%d",&a); vector v; for(int i=1,j;i<=a;i++) { scanf("%d",&j); v.pb( j ); } sort( all( v ) ); Lint j = 0, ans = 0; for(int i=v.size()-1;i>=0;i--) { ans += (1ll << j) * v[i]; j++; } cout << ans << endl; return 0; }