import sys
read = sys.stdin.buffer.read
readline = sys.stdin.buffer.readline
readlines = sys.stdin.buffer.readlines
from itertools import combinations 
def main():
    N = int(readline())
    L = [int(i) for i in readline().split()]

    #ソートしておく
    L.sort()

    #最長以外の二辺を先に決める
    #インデックスで二辺を選ぶ。最長の辺はjよりインデックスが大きいものとなることが保証される
    #jより後ろでc<a+bとなる最長の辺cの数を求めれば良い。二分探索で条件を満たす最大の辺を見つけるとよい

    #インデックス用の値を用意
    p = [i for i in range(N)]

    #組みを作る
    idxPairs = [(i, j) for i,j in combinations(p, 2)]

    #jよりインデックスが大きい辺の中から最長の辺を見つける
    ans = 0
    for i, j in idxPairs:
        #j以降を二分探索で調べる
        #最長の辺をL[j]と選ぶと必ず三角形を作ることができる
        l = j
        r = N 
        while r-l>1:
            mid = (r+l)//2
            if L[mid] < L[i]+L[j]:
                l = mid
            else:
                r = mid
        ans += l-j
    print(ans)
if __name__ == '__main__':
    main() import sys sys read = sys.stdin.buffer.read read sys.stdin.buffer.read sys.stdin.buffer sys.stdin sys stdin buffer read readline = sys.stdin.buffer.readline readline sys.stdin.buffer.readline sys.stdin.buffer sys.stdin sys stdin buffer readline readlines = sys.stdin.buffer.readlines readlines sys.stdin.buffer.readlines sys.stdin.buffer sys.stdin sys stdin buffer readlines from itertools import combinations def main():
    N = int(readline())
    L = [int(i) for i in readline().split()]

    #ソートしておく
    L.sort()

    #最長以外の二辺を先に決める
    #インデックスで二辺を選ぶ。最長の辺はjよりインデックスが大きいものとなることが保証される
    #jより後ろでc<a+bとなる最長の辺cの数を求めれば良い。二分探索で条件を満たす最大の辺を見つけるとよい

    #インデックス用の値を用意
    p = [i for i in range(N)]

    #組みを作る
    idxPairs = [(i, j) for i,j in combinations(p, 2)]

    #jよりインデックスが大きい辺の中から最長の辺を見つける
    ans = 0
    for i, j in idxPairs:
        #j以降を二分探索で調べる
        #最長の辺をL[j]と選ぶと必ず三角形を作ることができる
        l = j
        r = N 
        while r-l>1:
            mid = (r+l)//2
            if L[mid] < L[i]+L[j]:
                l = mid
            else:
                r = mid
        ans += l-j
    print(ans) main N = int(readline()) N int(readline()) int readline() readline int(i) for i in readline().split() for i in readline().split() i readline().split() ().split () readline split for i in readline().split() int(i) int i L = [int(i) for i in readline().split()] L [int(i) for i in readline().split()] L.sort() L.sort L sort i for i in range(N) for i in range(N) i range(N) range N for i in range(N) i p = [i for i in range(N)] p [i for i in range(N)] (i, j) for i,j in combinations(p, 2) for i,j in combinations(p, 2) i j combinations(p, 2) combinations p 2 for i,j in combinations(p, 2) (i, j) i j idxPairs = [(i, j) for i,j in combinations(p, 2)] idxPairs [(i, j) for i,j in combinations(p, 2)] ans = 0 ans 0 for i, j in idxPairs:
        #j以降を二分探索で調べる
        #最長の辺をL[j]と選ぶと必ず三角形を作ることができる
        l = j
        r = N 
        while r-l>1:
            mid = (r+l)//2
            if L[mid] < L[i]+L[j]:
                l = mid
            else:
                r = mid
        ans += l-j
     i j idxPairs l = j l j r = N r N while r-l>1:
            mid = (r+l)//2
            if L[mid] < L[i]+L[j]:
                l = mid
            else:
                r = mid
         r-l>1 r-l r l 1 mid = (r+l)//2 mid (r+l)//2 r+l r l 2 if L[mid] < L[i]+L[j]:
                l = mid
            else:
                r = mid
         L[mid] < L[i]+L[j] L[mid] L mid L[i]+L[j] L[i] L i L[j] L j l = mid l mid r = mid r mid ans += l-j ans l-j l j print(ans) print ans if __name__ == '__main__':
    main() __name__ == '__main__' __name__ '__main__' main() main def main():
    N = int(readline())
    L = [int(i) for i in readline().split()]

    #ソートしておく
    L.sort()

    #最長以外の二辺を先に決める
    #インデックスで二辺を選ぶ。最長の辺はjよりインデックスが大きいものとなることが保証される
    #jより後ろでc<a+bとなる最長の辺cの数を求めれば良い。二分探索で条件を満たす最大の辺を見つけるとよい

    #インデックス用の値を用意
    p = [i for i in range(N)]

    #組みを作る
    idxPairs = [(i, j) for i,j in combinations(p, 2)]

    #jよりインデックスが大きい辺の中から最長の辺を見つける
    ans = 0
    for i, j in idxPairs:
        #j以降を二分探索で調べる
        #最長の辺をL[j]と選ぶと必ず三角形を作ることができる
        l = j
        r = N 
        while r-l>1:
            mid = (r+l)//2
            if L[mid] < L[i]+L[j]:
                l = mid
            else:
                r = mid
        ans += l-j
    print(ans) def main():
    N = int(readline())
    L = [int(i) for i in readline().split()]

    #ソートしておく
    L.sort()

    #最長以外の二辺を先に決める
    #インデックスで二辺を選ぶ。最長の辺はjよりインデックスが大きいものとなることが保証される
    #jより後ろでc<a+bとなる最長の辺cの数を求めれば良い。二分探索で条件を満たす最大の辺を見つけるとよい

    #インデックス用の値を用意
    p = [i for i in range(N)]

    #組みを作る
    idxPairs = [(i, j) for i,j in combinations(p, 2)]

    #jよりインデックスが大きい辺の中から最長の辺を見つける
    ans = 0
    for i, j in idxPairs:
        #j以降を二分探索で調べる
        #最長の辺をL[j]と選ぶと必ず三角形を作ることができる
        l = j
        r = N 
        while r-l>1:
            mid = (r+l)//2
            if L[mid] < L[i]+L[j]:
                l = mid
            else:
                r = mid
        ans += l-j
    print(ans) main read = sys.stdin.buffer.read sys.stdin.buffer.read read readline = sys.stdin.buffer.readline sys.stdin.buffer.readline readline readlines = sys.stdin.buffer.readlines sys.stdin.buffer.readlines readlines
import sys
read = sys.stdin.buffer.read
readline = sys.stdin.buffer.readline
readlines = sys.stdin.buffer.readlines
from itertools import combinations 
def main():
    N = int(readline())
    L = [int(i) for i in readline().split()]

    #ソートしておく
    L.sort()

    #最長以外の二辺を先に決める
    #インデックスで二辺を選ぶ。最長の辺はjよりインデックスが大きいものとなることが保証される
    #jより後ろでc<a+bとなる最長の辺cの数を求めれば良い。二分探索で条件を満たす最大の辺を見つけるとよい

    #インデックス用の値を用意
    p = [i for i in range(N)]

    #組みを作る
    idxPairs = [(i, j) for i,j in combinations(p, 2)]

    #jよりインデックスが大きい辺の中から最長の辺を見つける
    ans = 0
    for i, j in idxPairs:
        #j以降を二分探索で調べる
        #最長の辺をL[j]と選ぶと必ず三角形を作ることができる
        l = j
        r = N 
        while r-l>1:
            mid = (r+l)//2
            if L[mid] < L[i]+L[j]:
                l = mid
            else:
                r = mid
        ans += l-j
    print(ans)
if __name__ == '__main__':
    main()
