#include // clang-format off using namespace std; using ll=long long; using ull=unsigned long long; using pll=pair; const ll INF=4e18; void print0(){}; template void print0(H h,T... t){cout<void print(H h,T... t){print0(h);if(sizeof...(T)>0)print0(" ");print(t...);} void perr0(){}; template void perr0(H h,T... t){cerr<void perr(H h,T... t){perr0(h);if(sizeof...(T)>0)perr0(" ");perr(t...);} void ioinit() { cout<& cum) { if (l == 0) return cum[r]; return cum[r] - cum[l - 1]; } int main() { // 一番左、一番右として選ばれる回数 ioinit(); ll N; cin >> N; vector A(N); for (ll i = 0; i < N; i++) { cin >> A[i]; } vector cum(N, A[0]); for (ll i = 1; i < N; i++) { cum[i] = A[i] + cum[i - 1]; } vector pow2(N + 1, 1); for (ll i = 1; i <= N; i++) { pow2[i] = pow2[i - 1] * 2 % MODULO; } ll ans = 0; for (ll i = 0; i < N; i++) { ll left = pow2[N - i - 1] - 1; ll right = pow2[i] - 1; ans += (left - right) * A[i] % MODULO; } ans %= MODULO; if (ans < 0) ans += MODULO; print(ans); return 0; }