Buggy python submission (verdict: Time Limit Exceeded):

"""
Writer:SPD_9X2
https://atcoder.jp/contests/tenka1-2019-beginner/tasks/tenka1_2019_d

愚直全探索は 0(3**N)
O(N**3)位までは計算量を落とさないといけない

ありうる辺の長さ全列挙→むりぽ
短い2辺の和 < 長い辺の和　なら構成不可能
構成不可能分配の方を数える？

少なくとも各辺に1本分配する場合、
構成不可能な場合の最長辺の長さは必ず総延長の半分以上となる
総延長の半分以上となる取り方の数を数えて引けばよい？

長さとしてありうるのは 300**2 までしかありえないので、
dp推移をO(1)でやれば解けそう

具体的なdp推移を考えてみる
最長辺を赤と決めてあげてよい？

全部赤に割り振って減らしていく
→Nこの中からいくつか取って、半分以上の長さにする方法を網羅できる

調整
→最長3色分をやると、2色に半分ずつ行った時をダブルカウントしてるので処理する

解けた！！ O(sum(a)*N)

→解けてねぇ！！！！！！！
1本の辺の作り方を数えても結局残りの辺の数によって分配が依存してしまう…

N本からA本選んで長さの半分を超える方法がいくつあるか数えればよい
そうすれば残りの分配をO(1)でできる

=======答えを見た========

最初の方針で行けるやん…？
DP[r] = 赤の数がrであるような「塗り分けの個数」

"""

import math
mod = 998244353
N = int(input())

a = []

for i in range(N):

    A = int(input())
    a.append(A)

asum = sum(a)
lis = [0] * ( asum + 1)
lis[0] = 1

for i in range(N):

    nlis = [0] * (asum+1)
    for j in range(asum+1):

        nlis[j] += lis[j] * 2
        if j+a[i] <= asum:
            nlis[j+a[i]] += lis[j]

    lis = nlis

#print (lis)
ans = pow(3,N,mod)
#print (ans)

if asum % 2 == 1:
    for i in range( asum//2+1 , asum+1):
        ans -= lis[i] * 3
        ans %= mod

    print (ans)

else:
    for i in range( asum//2 , asum+1):
        ans -= lis[i] * 3
        ans %= mod

    #ダブルカウントを引く→数個選んで半分取る方法の個数を数える→//2
    #その個数*3*2が2回カウントされてるので足す

    lis2 = [0] * (asum+1)
    lis2[0] = 1

    for i in range(N):
        for j in range(asum-a[i],-1,-1):
            lis2[j+a[i]] += lis2[j]
            lis2[j+a[i]] %= mod

    ans += lis2[asum//2] * 3
    print (ans % mod)
        

#WA解
"""
import math
mod = 998244353
N = int(input())

a = []

for i in range(N):

    A = int(input())
    a.append(A)

asum = sum(a)
lis = [0] * ( asum + 1)
lis[-1] = 1

for i in range(N):

    for j in range(len(lis)):

        if j - a[i] >= 0:
            lis[j-a[i]] += lis[j]
            lis[j-a[i]] %= mod

print (lis)
ans = pow(3,N,mod)
print (ans)

if asum % 2 == 1:
    for i in range( asum//2 , asum+1):
        ans -= lis[i] * 6
        ans %= mod

    print (ans)

"""

Fixed submission:
"""
Writer:SPD_9X2
https://atcoder.jp/contests/tenka1-2019-beginner/tasks/tenka1_2019_d

愚直全探索は 0(3**N)
O(N**3)位までは計算量を落とさないといけない

ありうる辺の長さ全列挙→むりぽ
短い2辺の和 < 長い辺の和　なら構成不可能
構成不可能分配の方を数える？

少なくとも各辺に1本分配する場合、
構成不可能な場合の最長辺の長さは必ず総延長の半分以上となる
総延長の半分以上となる取り方の数を数えて引けばよい？

長さとしてありうるのは 300**2 までしかありえないので、
dp推移をO(1)でやれば解けそう

具体的なdp推移を考えてみる
最長辺を赤と決めてあげてよい？

全部赤に割り振って減らしていく
→Nこの中からいくつか取って、半分以上の長さにする方法を網羅できる

調整
→最長3色分をやると、2色に半分ずつ行った時をダブルカウントしてるので処理する

解けた！！ O(sum(a)*N)

→解けてねぇ！！！！！！！
1本の辺の作り方を数えても結局残りの辺の数によって分配が依存してしまう…

N本からA本選んで長さの半分を超える方法がいくつあるか数えればよい
そうすれば残りの分配をO(1)でできる

=======答えを見た========

最初の方針で行けるやん…？
DP[r] = 赤の数がrであるような「塗り分けの個数」

"""

import math
mod = 998244353
N = int(input())

a = []

for i in range(N):

    A = int(input())
    a.append(A)

asum = sum(a)
lis = [0] * ( asum + 1)
lis[0] = 1

for i in range(N):

    nlis = [0] * (asum+1)
    for j in range(asum+1):

        nlis[j] += lis[j] * 2
        nlis[j] %= mod
        if j+a[i] <= asum:
            nlis[j+a[i]] += lis[j]
            nlis[j+a[i]] %= mod

    lis = nlis

#print (lis)
ans = pow(3,N,mod)
#print (ans)

if asum % 2 == 1:
    for i in range( asum//2+1 , asum+1):
        ans -= lis[i] * 3
        ans %= mod

    print (ans)

else:
    for i in range( asum//2 , asum+1):
        ans -= lis[i] * 3
        ans %= mod

    #ダブルカウントを引く→数個選んで半分取る方法の個数を数える→//2
    #その個数*3*2が2回カウントされてるので足す

    lis2 = [0] * (asum+1)
    lis2[0] = 1

    for i in range(N):
        for j in range(asum-a[i],-1,-1):
            lis2[j+a[i]] += lis2[j]
            lis2[j+a[i]] %= mod

    ans += lis2[asum//2] * 3
    print (ans % mod)
        

#WA解
"""
import math
mod = 998244353
N = int(input())

a = []

for i in range(N):

    A = int(input())
    a.append(A)

asum = sum(a)
lis = [0] * ( asum + 1)
lis[-1] = 1

for i in range(N):

    for j in range(len(lis)):

        if j - a[i] >= 0:
            lis[j-a[i]] += lis[j]
            lis[j-a[i]] %= mod

print (lis)
ans = pow(3,N,mod)
print (ans)

if asum % 2 == 1:
    for i in range( asum//2 , asum+1):
        ans -= lis[i] * 6
        ans %= mod

    print (ans)

"""