import sys

input = sys.stdin.readline

sys.setrecursionlimit(10 ** 7)



import numpy as np

MOD = 998244353



N = int(eval(input()))

A = [int(eval(input())) for _ in range(N)]

S = sum(A)



# 赤の和がS/2以上となるものを求めて3倍

# 和に対して何通りあるのか



dp = np.zeros(S+1, dtype=np.int64)

dp[0] = 1

for a in A:

    prev = dp

    dp = prev * 2 # 赤以外を採用

    dp[a:] += prev[:-a] # 赤

    dp %= MOD



answer = pow(3,N,MOD) - dp[(1+S)//2:].sum() * 3

# 2色が反例となる場合を引きすぎている

if S % 2 == 0:

    dp = np.zeros(S+1, dtype=np.int64)

    dp[0] = 1

    for a in A:

        dp[a:] += dp.copy()[:-a]

        dp %= MOD

    answer += dp[S//2] * 3

answer %= MOD

print(answer)
import sys

input = sys.stdin.readline

sys.setrecursionlimit(10 ** 7)



import numpy as np

MOD = 998244353



N = int(eval(input()))

A = [int(eval(input())) for _ in range(N)]

S = sum(A)



# 赤青の和がS/2以下となるものを求めて3倍



dp = np.zeros(S//2+1, dtype=np.int64)

dp[0] = 1

for a in A:

    prev = dp

    dp = prev.copy()

    dp[a:] += prev[:-a] * 2

    dp %= MOD



answer = pow(3,N,MOD) - dp.sum() * 3

if S % 2 == 0:

    dp = np.zeros(S//2+1, dtype=np.int64)

    dp[0] = 1

    for a in A:

        dp[a:] += dp.copy()[:-a]

        dp %= MOD

    answer += dp[S//2] * 3

answer %= MOD

print(answer)
import sys

input = sys.stdin.readline
sys.setrecursionlimit(10**7)
import numpy as np

MOD = 998244353
N = int(eval(input()))
A = [int(eval(input())) for _ in range(N)]
S = sum(A)
# 赤の和がS/2以上となるものを求めて3倍
# 和に対して何通りあるのか
dp = np.zeros(S + 1, dtype=np.int64)
dp[0] = 1
for a in A:
    prev = dp
    dp = prev * 2  # 赤以外を採用
    dp[a:] += prev[:-a]  # 赤
    dp %= MOD
answer = pow(3, N, MOD) - dp[(1 + S) // 2 :].sum() * 3
# 2色が反例となる場合を引きすぎている
if S % 2 == 0:
    dp = np.zeros(S + 1, dtype=np.int64)
    dp[0] = 1
    for a in A:
        dp[a:] += dp.copy()[:-a]
        dp %= MOD
    answer += dp[S // 2] * 3
answer %= MOD
print(answer)

import sys

input = sys.stdin.readline
sys.setrecursionlimit(10**7)
import numpy as np

MOD = 998244353
N = int(eval(input()))
A = [int(eval(input())) for _ in range(N)]
S = sum(A)
# 赤青の和がS/2以下となるものを求めて3倍
dp = np.zeros(S // 2 + 1, dtype=np.int64)
dp[0] = 1
for a in A:
    prev = dp
    dp = prev.copy()
    dp[a:] += prev[:-a] * 2
    dp %= MOD
answer = pow(3, N, MOD) - dp.sum() * 3
if S % 2 == 0:
    dp = np.zeros(S // 2 + 1, dtype=np.int64)
    dp[0] = 1
    for a in A:
        dp[a:] += dp.copy()[:-a]
        dp %= MOD
    answer += dp[S // 2] * 3
answer %= MOD
print(answer)

-# 赤の和がS/2以上となるものを求めて3倍 -# 和に対して何通りあるのか -dp = np.zeros(S + 1, dtype=np.int64) +# 赤青の和がS/2以下となるものを求めて3倍 +dp = np.zeros(S // 2 + 1, dtype=np.int64) -    dp = prev * 2  # 赤以外を採用 -    dp[a:] += prev[:-a]  # 赤 +    dp = prev.copy() +    dp[a:] += prev[:-a] * 2 -answer = pow(3, N, MOD) - dp[(1 + S) // 2 :].sum() * 3 -# 2色が反例となる場合を引きすぎている +answer = pow(3, N, MOD) - dp.sum() * 3 -    dp = np.zeros(S + 1, dtype=np.int64) +    dp = np.zeros(S // 2 + 1, dtype=np.int64)