from bisect import bisect_left



N = int(eval(input()))

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



L.sort()



cnt = 0



# 2番目に長い棒bを固定

for b in range(N):

    # bより短い棒aを一つずつ探索

    for a in range(b):

        ab = L[a] + L[b]

        # 二分探索でa+bより短い棒（c<a+bが成り立つc）の範囲を求める

        r = bisect_left(L, ab)

        # cの範囲のうちbの範囲を除外して、cの本数を求める

        cnt += r - (b + 1)



print(cnt)


import bisect



N = int(eval(input()))

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



L.sort()



cnt = 0

for i, b in enumerate(L):

    for a in L[:i]:

        idx = bisect.bisect_left(L, a+b)

        cnt += idx - (i + 1)



print(cnt)

from bisect import bisect_left

N = int(eval(input()))
L = list(map(int, input().split()))
L.sort()
cnt = 0
# 2番目に長い棒bを固定
for b in range(N):
    # bより短い棒aを一つずつ探索
    for a in range(b):
        ab = L[a] + L[b]
        # 二分探索でa+bより短い棒（c<a+bが成り立つc）の範囲を求める
        r = bisect_left(L, ab)
        # cの範囲のうちbの範囲を除外して、cの本数を求める
        cnt += r - (b + 1)
print(cnt)

import bisect

N = int(eval(input()))
L = list(map(int, input().split()))
L.sort()
cnt = 0
for i, b in enumerate(L):
    for a in L[:i]:
        idx = bisect.bisect_left(L, a + b)
        cnt += idx - (i + 1)
print(cnt)

-from bisect import bisect_left +import bisect -# 2番目に長い棒bを固定 -for b in range(N): -    # bより短い棒aを一つずつ探索 -    for a in range(b): -        ab = L[a] + L[b] -        # 二分探索でa+bより短い棒（c<a+bが成り立つc）の範囲を求める -        r = bisect_left(L, ab) -        # cの範囲のうちbの範囲を除外して、cの本数を求める -        cnt += r - (b + 1) +for i, b in enumerate(L): +    for a in L[:i]: +        idx = bisect.bisect_left(L, a + b) +        cnt += idx - (i + 1)