#include <bits/stdc++.h>
using namespace std;
const int mod = 1e9 + 7;
int add(int a, int b) {
  a += b;
  return a >= mod ? a - mod : a;
}
void ckadd(int &a, int b) { a = add(a, b); }
int sub(int a, int b) {
  a -= b;
  return a < 0 ? a + mod : a;
}
void cksub(int &a, int b) { a = sub(a, b); }
int mul(int a, int b) { return (long long)a * b % mod; }
void ckmul(int &a, int b) { a = mul(a, b); }
int powmod(int x, int k) {
  int ans = 1;
  for (; k; k >>= 1, ckmul(x, x))
    if (k & 1) ckmul(ans, x);
  return ans;
}
int inv(int x) { return powmod(x, mod - 2); }
const int N = 1000050;
int F[N], I[N];
int binom(int n, int k) { return mul(F[n], mul(I[k], I[n - k])); }
void calc() {
  F[0] = 1;
  for (int i = 1; i < N; i++) F[i] = mul(F[i - 1], i);
  I[N - 1] = inv(F[N - 1]);
  for (int i = N - 2; ~i; i--) I[i] = mul(I[i + 1], i + 1);
}
int main() {
  int n;
  scanf("%i", &n);
  vector<int> x(n);
  calc();
  for (int i = 0; i < n; i++) scanf("%i", &x[i]);
  int ans = 0;
  for (int i = 0; i < n - 1; i++) {
    cksub(ans, mul(x[i], F[n - 1]));
  }
  for (int i = 0; i < n - 1; i++) {
    for (int j = i + 1; j < n; j++) {
      int k = j - i - 1;
      if (j != n - 1)
        ckadd(ans,
              mul(x[j], mul(mul(F[k], F[n - k - 3]), binom(n - 1, k + 2))));
      else
        ckadd(ans,
              mul(x[j], mul(mul(F[k], F[n - k - 2]), binom(n - 1, k + 1))));
    }
  }
  printf("%i\n", ans);
  return 0;
}
