#include <bits/stdc++.h>
#pragma optimize("TKACHENKO-GORYACHENKO")
#pragma GCC optimize("O3")
using namespace std;
const long long maxn = 1e5 + 100;
const long long mod = 1e9 + 7;
long long n, m, k, t;
long long A[maxn];
long long F[maxn];
long long st2[maxn];
long long stupid() {
  long long q;
  vector<long long> sum(n);
  vector<long long> B;
  for (q = 0; q < n - 1; q++) {
    B.push_back(q);
  }
  long long ans = 0;
  while (1) {
    long long q, w;
    for (q = 0; q < n - 1; q++) {
      long long mn = n - 1;
      for (w = q + 1; w < n - 1; w++) {
        if (B[w] > B[q]) {
          mn = min(mn, B[w]);
        }
      }
      sum[B[q]] += A[mn] - A[B[q]];
      ans += A[mn] - A[B[q]];
    }
    if (!next_permutation(B.begin(), B.end())) {
      break;
    }
  }
  return ans;
}
long long step(long long a, long long first) {
  if (first == 0) {
    return 1;
  }
  if (first % 2 == 1) {
    return step(a, first - 1) * a % mod;
  }
  long long t = step(a, first / 2);
  return t * t % mod;
}
long long del(long long p, long long q) { return p * step(q, mod - 2) % mod; }
long long C[maxn];
int main() {
  long long q, w, e, a, b, c, d;
  ios_base ::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  ;
  cin >> n;
  long long sum = 0;
  st2[0] = 1;
  F[0] = 1;
  for (q = 1; q < maxn; q++) {
    F[q] = F[q - 1] * q % mod;
    st2[q] = st2[q - 1] * 2 % mod;
  }
  for (q = 0; q < n; q++) {
    cin >> A[q];
    if (q != n - 1) {
      sum += A[q];
    }
  }
  long long ans1 = (-((sum * F[n - 1]) % mod) + mod) % mod;
  for (q = 1; q < n - 1; q++) {
    long long c = del(F[n - 1], F[q + 1]) * F[q - 1] % mod;
    C[q] = c;
    sum -= A[q - 1];
    ans1 += sum * c % mod;
    ans1 %= mod;
  }
  sum = 0;
  for (q = 1; q < n; q++) {
    ans1 += ((F[n - 1] - sum + mod) % mod) * (A[n - 1]) % mod;
    ans1 %= mod;
    sum += C[q];
  }
  cout << ans1 << endl;
  return 0;
  long long ans = 0;
  for (q = 0; q < n - 1; q++) {
    long long sum = 0;
    long long s = 0;
    for (w = q + 1; w < n - 1; w++) {
      ans += (A[w] - A[q]) * del(F[n - 1], F[w - q + 1]) % mod * F[w - q - 1] %
             mod;
      sum += del(F[n - 1], F[w - q + 1]) * F[w - q - 1] % mod;
      sum %= mod;
    }
    ans += (A[n - 1] - A[q]) * ((F[n - 1] - sum + mod) % mod);
    ans %= mod;
  }
  cout << ans << endl;
  return 0;
}
