#include template class Combination { std::vector fact, finv, inv; public: Combination() {} Combination(int sz) { fact.resize(sz); finv.resize(sz); inv.resize(sz); fact[0] = 1; for (int i = 1; i < sz; ++i) { fact[i] = fact[i - 1] * i % mod; } inv[0] = 0; inv[1] = 1; for (int i = 2; i < sz; ++i) { inv[i] = mod - inv[mod % i] * (mod / i) % mod; } finv[0] = 1; for (int i = 1; i < sz; ++i) { finv[i] = finv[i - 1] * inv[i] % mod; } } long long C(long long n, long long k) { if (n < k) return 0; if (n < 0 || k < 0) return 0; return (fact[n] * finv[k] % mod) * finv[n - k] % mod; } long long P(long long n, long long k) { if (n < k) return 0; if (n < 0 || k < 0) return 0; return fact[n] * finv[n - k] % mod; } long long H(long long n, long long k) { return this->C(n + k - 1, k); } long long getfact(int i) { return fact[i]; } long long getinv(int i) { return inv[i]; } long long getfinv(int i) { return finv[i]; } }; using namespace std; using ll = long long; using vi = vector; using vvi = vector; using vll = vector; using vvll = vector; using P = pair; const double eps = 1e-8; const ll MOD = 1000000007; const int INF = INT_MAX / 2; const ll LINF = LLONG_MAX / 2; template bool chmax(T1 &a, const T2 &b) { if(a < b) {a = b; return true;} return false; } template bool chmin(T1 &a, const T2 &b) { if(a > b) {a = b; return true;} return false; } template ostream& operator<<(ostream &os, const pair p) { os << p.first << ":" << p.second; return os; } template ostream &operator<<(ostream &os, const vector &v) { for(int i=0;i<((int)(v.size()));++i) { if(i) os << " "; os << v[i]; } return os; } int main() { cin.tie(0); ios::sync_with_stdio(false); cout << fixed << setprecision(10); int n; cin >> n; vll a(n); for(int i=0;i<(n);++i) cin >> a[i]; Combination comb(1000); ll su = 0; for(int i=0;i<(n);++i) { su += a[i] * comb.C(n-1, i); su %= MOD; } cout << su << endl; }