#include <bits/stdc++.h>
using namespace std;
namespace Number {
long long int gcd(long long int a, long long int b) {
  if (a % b == 0) {
    return b;
  }
  return gcd(b, a % b);
}
long long int gcd_extend(long long int a, long long int b, long long int *x,
                         long long int *y) {
  if (a == 0) {
    *x = 0, *y = 1;
    return b;
  }
  long long int x1, y1;
  long long int gcd = gcd_extend(b % a, a, &x1, &y1);
  *x = y1 - (b / a) * x1;
  *y = x1;
  return gcd;
}
long long int mod_inv(long long int a, long long int m) {
  long long int x, y;
  long long int g = gcd_extend(a, m, &x, &y);
  long long int a_inv = (x % m + m) % m;
  return a_inv;
}
long long int mod_pow(long long int x, long long int n, long long int m) {
  if (n == 0) {
    return 1;
  } else if (n & 1) {
    long long int half = mod_pow(x, n / 2, m);
    return (half * half % m) * x % m;
  } else {
    long long int half = mod_pow(x, n / 2, m);
    return half * half % m;
  }
}
long long int mul(long long int from, long long int to, long long int m) {
  long long int ret = 1;
  for (long long int i = from; i <= to; i++) {
    ret *= i;
    ret %= m;
  }
  return ret;
}
long long int mod_comb(long long int n, long long int k, long long int m) {
  long long int mi = k < n - k ? k : n - k;
  long long int up = mul(n - mi + 1, n, m);
  long long int down = mul(1, mi, m);
  return (up * mod_inv(down, m)) % m;
}
}  // namespace Number
const int MOD = 998244353;
const int MAXN = 1e6 + 2;
int main() {
  std::ios::sync_with_stdio(false);
  cin.tie(0);
  int N;
  cin >> N;
  vector<long long int> A(MAXN);
  for (int i = 0; i < N; ++i) {
    cin >> A[i];
  }
  long long int ans = 0;
  for (int i = 0; i < N - 1; ++i) {
    ans += (Number::mod_pow(2, N - 1 - i - 1, MOD) * A[i] % MOD) * (N - i - 1);
    ans %= MOD;
  }
  for (int i = 0; i < N; ++i) {
    ans += Number::mod_pow(2, N - 1 - i, MOD) * A[i];
    ans %= MOD;
  }
  cout << ans << endl;
  return 0;
}
