#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
#include <cmath>
#include <map>
#include <queue>
#include <iomanip>
#include <set>
#include <tuple>
#define mkp make_pair
#define mkt make_tuple
#define rep(i,n) for(int i = 0; i < (n); ++i)
using namespace std;
typedef long long ll;
const ll MOD=998244353;

ll mod_pow(ll x,ll n){
    x%=MOD;
    ll res=1;
    while(n>0){
        if(n&1) res=res*x%MOD;
        x=x*x%MOD;
        n/=2;
    }
    return res;
}

void add(ll &a,ll b){
    a=(a+b)%MOD;
}

void mul(ll &a,ll b){
    a=a*b%MOD;
}

int N;
vector<ll> X;


int main(){
  cin>>N;
  X.resize(N);
  rep(i,N) cin>>X[i];

  ll ans=0;
  for(int i=0;i<N;i++){
      ll res=0;
      res=mod_pow(X[i]+1,i);
      mul(res,X[i]);
      mul(res,mod_pow(2ll,N-(i+1)));
      add(ans,res);
  }

  cout<<ans<<endl;

  return 0;
}

