// yukicodr // No.1681 //二次元可変配列 //vector > mass; //vector > memo; //vector memo; //#include "stdafx.h" #include #include #include //list #include //queue #include //連想コンテナ(要素が自動でソートされる)、要素1つ(Key)、keyの重複ない、O(logN) #include //連想コンテナ(要素が自動でソートされる)、要素2つ(Key,data)、keyの重複ない、dataは重複あり、O(logN) #include //hash、O(1) #include //hash、O(1) #include #include #include #include #include //#include using namespace std; #define FOR(x,to) for(x=0;x(b)?(a):(b)) #define FMIN(a,b) ((a)<(b)?(a):(b)) #define FCEIL(a,b) ((a)+(b)-1)/(b) typedef unsigned long long ULL; typedef signed long long SLL; queue _queue; int N; ULL A[200005]; ULL a, b, c,d[200005], total; int main() { cin >> N; //べき乗の部分も大きくなるので予め計算しておく d[N-1] = 2; for (int j = N-2; j > 0; j--) { d[j] = d[j+1]*3; d[j] %= 1000000007; //cout << j << "," << d[j] << endl; } a = 1; for (int i = 1; i < N; i++) { scanf("%lld", &A[i]); //A[i] %= 1000000007; a *= A[i]; a %= 1000000007; c = a * d[i]; c %= 1000000007; total += c; total %= 1000000007; } scanf("%lld", &A[N]); a *= A[N]; a %= 1000000007; total += a; total %= 1000000007; cout << total; return 0; }