import itertools



N = int(eval(input()))

L = list(map(int,input().split()))



# N = 2000

# L = list(range(N))



# # 重複を消す

# L = list(set(L))

# N = len(L)



# Lを小さい順にソート

L = sorted(L)



# j=0〜max(L)について，L[i]<jを満たす最大のi: X[j] = i

X = []

for j in range(L[-1]+1):

    flag = False

    for i in range(N-1,-1,-1):

        if L[i] < j:

            X.append(i)

            flag = True

            break

    # 見つからなければ

    if not flag: X.append(None)



# j=0〜max(L)について，L[i]>jを満たす最小のi: Y[j] = i

Y = []

for j in range(L[-1]+1):

    flag = False

    for i in range(N):

        if L[i] > j:

            Y.append(i)

            flag = True

            break

    # 見つからなければ

    if not flag: Y.append(None)



#print(L)



ind1 = 0

ind2 = N-1

ans = 0

for i in range(N-2):

    a = L[i]

    for j in range(i+1,N-1):

        b = L[j]



        # print(b-a,a+b,Y[b-a],X[a+b])



        # cのindexの範囲 = Y[b-a]〜X[a+b]

        cmin = Y[b-a]

        if a+b <= L[-1]:

            cmax = X[a+b]

        else:

            cmax = N - 1



        # cminはjより大きい

        if cmin is not None and cmin <= j:

            cmin = j + 1



        #print(b-a,a+b,cmin,cmax)



        # if a == 2 and b == 3:

        #     print(b-a,a+b,cmin,cmax)

        #     exit()

        

            

        # どちらかがNoneなら0

        if cmin is not None and cmax is not None and cmin <= cmax:

            ans += cmax - cmin + 1



print(ans)
import itertools

import bisect

            



N = int(eval(input()))

L = list(map(int,input().split()))



# Lを小さい順にソート

L = sorted(L)



# a <= b <= cを仮定してもおｋ

# a,bを全探索し，条件を満たすcの数をO(N)未満の方法で求めればよい

ans = 0

for i in range(N-2):

    a = L[i]

    for j in range(i+1,N-1):

        b = L[j]



        # Lの中で条件b-a<cを満たす最小のc

        ind_cmin = j+1



        # Lの中で条件L[k]<a+bを満たす最大のk = Lの中で昇順ソートを崩さずa+bを挿入できる最小のインデックス-1

        # 2分法で探す

        ind_cmax = bisect.bisect_left(L,a+b) - 1



        ans += ind_cmax - ind_cmin + 1



print(ans)
import itertools

N = int(eval(input()))
L = list(map(int, input().split()))
# N = 2000
# L = list(range(N))
# # 重複を消す
# L = list(set(L))
# N = len(L)
# Lを小さい順にソート
L = sorted(L)
# j=0〜max(L)について，L[i]<jを満たす最大のi: X[j] = i
X = []
for j in range(L[-1] + 1):
    flag = False
    for i in range(N - 1, -1, -1):
        if L[i] < j:
            X.append(i)
            flag = True
            break
    # 見つからなければ
    if not flag:
        X.append(None)
# j=0〜max(L)について，L[i]>jを満たす最小のi: Y[j] = i
Y = []
for j in range(L[-1] + 1):
    flag = False
    for i in range(N):
        if L[i] > j:
            Y.append(i)
            flag = True
            break
    # 見つからなければ
    if not flag:
        Y.append(None)
# print(L)
ind1 = 0
ind2 = N - 1
ans = 0
for i in range(N - 2):
    a = L[i]
    for j in range(i + 1, N - 1):
        b = L[j]
        # print(b-a,a+b,Y[b-a],X[a+b])
        # cのindexの範囲 = Y[b-a]〜X[a+b]
        cmin = Y[b - a]
        if a + b <= L[-1]:
            cmax = X[a + b]
        else:
            cmax = N - 1
        # cminはjより大きい
        if cmin is not None and cmin <= j:
            cmin = j + 1
        # print(b-a,a+b,cmin,cmax)
        # if a == 2 and b == 3:
        #     print(b-a,a+b,cmin,cmax)
        #     exit()
        # どちらかがNoneなら0
        if cmin is not None and cmax is not None and cmin <= cmax:
            ans += cmax - cmin + 1
print(ans)

import itertools
import bisect

N = int(eval(input()))
L = list(map(int, input().split()))
# Lを小さい順にソート
L = sorted(L)
# a <= b <= cを仮定してもおｋ
# a,bを全探索し，条件を満たすcの数をO(N)未満の方法で求めればよい
ans = 0
for i in range(N - 2):
    a = L[i]
    for j in range(i + 1, N - 1):
        b = L[j]
        # Lの中で条件b-a<cを満たす最小のc
        ind_cmin = j + 1
        # Lの中で条件L[k]<a+bを満たす最大のk = Lの中で昇順ソートを崩さずa+bを挿入できる最小のインデックス-1
        # 2分法で探す
        ind_cmax = bisect.bisect_left(L, a + b) - 1
        ans += ind_cmax - ind_cmin + 1
print(ans)

+import bisect -# N = 2000 -# L = list(range(N)) -# # 重複を消す -# L = list(set(L)) -# N = len(L) -# j=0〜max(L)について，L[i]<jを満たす最大のi: X[j] = i -X = [] -for j in range(L[-1] + 1): -    flag = False -    for i in range(N - 1, -1, -1): -        if L[i] < j: -            X.append(i) -            flag = True -            break -    # 見つからなければ -    if not flag: -        X.append(None) -# j=0〜max(L)について，L[i]>jを満たす最小のi: Y[j] = i -Y = [] -for j in range(L[-1] + 1): -    flag = False -    for i in range(N): -        if L[i] > j: -            Y.append(i) -            flag = True -            break -    # 見つからなければ -    if not flag: -        Y.append(None) -# print(L) -ind1 = 0 -ind2 = N - 1 +# a <= b <= cを仮定してもおｋ +# a,bを全探索し，条件を満たすcの数をO(N)未満の方法で求めればよい -        # print(b-a,a+b,Y[b-a],X[a+b]) -        # cのindexの範囲 = Y[b-a]〜X[a+b] -        cmin = Y[b - a] -        if a + b <= L[-1]: -            cmax = X[a + b] -        else: -            cmax = N - 1 -        # cminはjより大きい -        if cmin is not None and cmin <= j: -            cmin = j + 1 -        # print(b-a,a+b,cmin,cmax) -        # if a == 2 and b == 3: -        #     print(b-a,a+b,cmin,cmax) -        #     exit() -        # どちらかがNoneなら0 -        if cmin is not None and cmax is not None and cmin <= cmax: -            ans += cmax - cmin + 1 +        # Lの中で条件b-a<cを満たす最小のc +        ind_cmin = j + 1 +        # Lの中で条件L[k]<a+bを満たす最大のk = Lの中で昇順ソートを崩さずa+bを挿入できる最小のインデックス-1 +        # 2分法で探す +        ind_cmax = bisect.bisect_left(L, a + b) - 1 +        ans += ind_cmax - ind_cmin + 1