#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int N = 1e5 + 10;
const int mod = 1e9 + 7;
int n;
ll dp[N][2], w[N][2];
ll a[N];

int main() {
    scanf("%d", &n);
    for (int i = 0; i < n; i++) {
        scanf("%lld", &a[i]);
    }
    dp[1][0] = a[0];
    w[1][0] = 1;
    for (int i = 1; i < n; i++) {
        dp[i + 1][0] = (dp[i][0] + dp[i][1]) % mod + (a[i] * w[i][0]) % mod +(a[i] * w[i][1]) % mod;
        dp[i + 1][1] = (dp[i][0] - a[i] * w[i][0] %mod+ mod) % mod;
        w[i + 1][0] = (w[i][0] + w[i][1]) % mod;
        w[i + 1][1] = w[i][0];
    }
    printf("%lld\n", (dp[n][0] + dp[n][1]) % mod);
    return 0;
}

#include <bits/stdc++.h>
using namespace std;
#define ll long long int
#define ld long double
#define pb push_back
#define mp make_pair
#define ff first
#define ss second
#define PI 3.14159265
ll mod1=1000000007;
// bool comp(pair<ll,ll>a,pair<ll,ll>b)
// {
//    // if(a.second==b.second)
//    //  return a.first<b.first;
//   // else
//     return a.second<b.second;

// }
// sort(a.begin(),a.end(),greater<int>());
// priority_queue<int, vector<int>, greater<int> > Q;
// vector<ll> factorial(1001,1);
// vector<ll> inv_factorial(1001);
// vector<vector<ll> > combi(1001,vector<ll>(1001));
// ll binpow(ll a, ll b)
// {
//     ll res = 1;
//     while (b > 0) {
//         if (b & 1)
//             res = res * a;
//         a = a * a;
//         b >>= 1;
//     }
//     return res;
// }
 
// ll binpow(ll a, ll b, ll mod)
// {
//     ll res = 1;
//     while (b > 0) {
//         if (b & 1)
//             res = (res * a)%mod;
//         a = (a * a)%mod;
//         b >>= 1;
//     }
//     return res%mod;
// }
 
// ll gcd(ll a, ll b)
// {
//     if(b==0) return a;
//     else return gcd(b,a%b);
// }
 
// ll lcm (ll a, ll b)
// {
//     return ((a / gcd(a, b)) * b);
// }
 
// bool comp(ll a, ll b)
// {
//     return a>b;
// }
 
// ll inversemod(ll a, ll mod)
// {
//     return binpow(a,mod-2, mod);
// }
// for(int i=1;i<=1000;i++) factorial[i]=(factorial[i-1]*i)%mod1;
 
//   for(int i=0;i<=1000;i++) inv_factorial[i]=inversemod(factorial[i],mod1);
 
//   for(int i=0;i<=1000;i++)
//   {
//     for(int j=0;j<=i;j++)
//     {
//       combi[i][j]=(((factorial[i]*inv_factorial[i-j])%mod1)*inv_factorial[j])%mod1;
//     }
//   }
// ll t[4*20001]
// void build(ll a[], ll v, ll tl, ll tr) {
//     if (tl == tr) {
//         t[v] = a[tl];
//     } else {
//         int tm = (tl + tr) / 2;
//         build(a, v*2, tl, tm);
//         build(a, v*2+1, tm+1, tr);
//         t[v] = t[v*2] ^ t[v*2+1];
//     }
// }
// void dfs(ll i,ll *visited,vector<ll> e[])
// {
//   visited[i]=1;
//   ll n=e[i].size();
//   for(ll j=0;j<n;j++)
//   {
//     if(visited[e[i][j]]==0)
//       dfs(e[i][j],visited,e);
//   }
// }

int main()
{
   ios_base::sync_with_stdio(false);
   cin.tie(0);
   ll test;
   // cin>>test;
   test=1;
   for(ll ftest=0;ftest<test;ftest++)
   {
      ll n,i,j;
      cin>>n;
      ll A[n];
      ll dp[n+1];
      dp[0]=1;
      dp[1]=1;
      for(i=2;i<=n;i++)
         dp[i]=(dp[i-1]+dp[i-2])%mod1;
      ll ans=0;
      for(i=0;i<n;i++)
      {
         cin>>A[i];
         ans=(ans+((((A[i]*dp[i])%mod1)*dp[n-i])%mod1))%mod1;
         if(i!=0)
            ans=(ans-((((A[i]*dp[i-1])%mod1)*dp[n-i-1])%mod1))%mod1;
         ans=(ans%mod1+mod1)%mod1;
         // ans=(ans+x)%mod1;
      }
      cout<<ans<<'\n';
   }
}