#include <bits/stdc++.h>
using namespace std;
long long gcd(long long a, long long b) { return (a ? gcd(b % a, a) : b); }
long long power(long long a, long long n) {
  long long p = 1;
  while (n > 0) {
    if (n & 1) {
      p = p * a;
    }
    n >>= 1;
    a *= a;
  }
  return p;
}
long long power(long long a, long long n, long long mod) {
  long long p = 1;
  while (n > 0) {
    if (n & 1) {
      p = p * a;
      p %= mod;
    }
    n >>= 1;
    a *= a;
    a %= mod;
  }
  return p % mod;
}
const int N = 300005;
long long x[N];
long long d[N], a[N];
long long find(int i, int j) {
  if (i == 0) return x[j];
  return (x[j] - x[i - 1] + 1000000007) % 1000000007;
}
int main() {
  int i, j;
  int n;
  scanf("%d", &n);
  for (i = 0; i < n; i++) scanf("%lld", &a[i]);
  sort(a, a + n);
  x[0] = 1;
  for (i = 1; i < n; i++) {
    d[i] = a[i] - a[i - 1];
    x[i] = (power(2ll, i, 1000000007) + x[i - 1]) % 1000000007;
  }
  long long ans = 0;
  for (i = 1; i < n; i++) {
    ans += (d[i] * find(i - 1, n - 2)) % 1000000007;
  }
  long long z = ans;
  for (i = 2; i < n; i++) {
    z = (z - (d[i - 1] * x[n - i]) % 1000000007 + 1000000007) % 1000000007;
    z = (z * power(2, 1000000007 - 2, 1000000007)) % 1000000007;
    ans = (ans + z) % 1000000007;
  }
  printf("%lld\n", ans);
  return 0;
}
