#include <bits/stdc++.h>
template <class T>
inline T qmin(T a, T b) {
  return a < b ? a : b;
}
template <class T>
inline T qmax(T a, T b) {
  return a > b ? a : b;
}
const double eps = 1e-9;
const double PI = acos(-1.0);
const int inf = 0x3f3f3f3f;
const int maxn = (int)3e5 + 5;
const int MAXN = (int)3e5 + 5;
const long long INF = 0x3f3f3f3f3f3f3f3f;
using namespace std;
long long a[maxn];
long long pow2[maxn];
long long mod = 1e9 + 7;
long long qwe(long long x, long long y) {
  long long res = 1;
  while (y) {
    if (y & 1) {
      res = res * x % mod;
      y--;
    }
    x = x * x % mod;
    y = y / 2;
  }
  return res;
}
int main() {
  long long n;
  scanf("%lld", &n);
  if (n == 1) {
    printf("0\n");
    return 0;
  }
  long long x = 1;
  pow2[0] = 1;
  for (int i = 1; i < maxn; i++) {
    x = x * 2 % mod;
    pow2[i] = x;
  }
  for (int i = 1; i <= n; i++) scanf("%lld", &a[i]);
  sort(a + 1, a + 1 + n);
  long long ans = 0;
  long long num;
  for (int i = 1; i <= n; i++) {
    long long num1, num2;
    num1 = a[i] * (pow2[i - 1] - 1LL);
    num2 = a[i] * (pow2[n - i] - 1LL);
    num = num1 - num2;
    ans = (ans % mod + num % mod) % mod;
  }
  printf("%lld\n", ans % mod);
  return 0;
}
