import java.io.IOException;
import java.util.Scanner;
public class Main {
static int MOD = 1000000007;
public static void main(String[] args) throws IOException {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int[] arr = new int[n];
for (int i = 0; i < n; i++) {
arr[i] = scanner.nextInt();
}
//
int k = n / 2;
if( n%2 !=0){
k++;
}
long[] sum = new long[k + 1];
for (int i = 0; i < n; i++) {
sum[0] += arr[i];
sum[0] %= MOD;
}
for (int x = 1; x < k; x++) {
sum[x] = (sum[x - 1] + 2 * MOD - arr[x - 1] - arr[n - x]) % MOD;
}
//求数组
long[] sumsum = new long[k + 1];
for (int i = 0; i < k; i++) {
if (i > 0) {
sumsum[i] = sumsum[i - 1] + sum[i];
} else {
sumsum[i] = sum[0];
}
sumsum[i] %= MOD;
}
//再求最简
long ans = 0;
for (int llen = 1; llen <= k; llen++) {
long tmp = 1L;
tmp = sumsum[llen - 1] * pow(llen, MOD - 2) % MOD;
ans = (ans + tmp) % MOD;
if (llen < k) {
tmp = sumsum[llen - 1] * pow(n +1 - llen, MOD - 2) % MOD;
ans = (ans + tmp) % MOD;
} else {
if (n % 2 == 1) {
continue;
} else {
tmp = sumsum[llen - 1] * pow(n +1 - llen, MOD - 2) % MOD;
ans = (ans + tmp) % MOD;
}
}
}
System.out.println(ans);
}
public static long pow(long b, int x) {
if (x == 0) {
return 1;
}
if (x == 1) {
return b;
}
long a = pow(b, x / 2);
if (x % 2 == 0) {
return a * a % MOD;
} else {
return ((a * a % MOD) * b) % MOD;
}
}
}