using System;
using System.Collections.Generic;
using System.Linq;

namespace abc162d
{
    class Program
    {
        static void Main(string[] args)
        {
            //==========================================================================================================================
            //1) input
            long n = int.Parse(Console.ReadLine());
            string s = Console.ReadLine();

            //var rIndexes = s
            //.Select((p, i) => new { Content = p, Index = i })
            //.Where(v => v.Content == 'R')
            //.Select(v => v.Index + 1);

            //var gIndexes = s
            //.Select((p, i) => new { Content = p, Index = i })
            //.Where(v => v.Content == 'G')
            //.Select(v => v.Index + 1);

            //var bIndexes = s
            //.Select((p, i) => new { Content = p, Index = i })
            //.Where(v => v.Content == 'B')
            //.Select(v => v.Index + 1);

            long r = 0;
            long g = 0;
            long b = 0;

            for (int index = 0; index < n; index++)
            {
                if (s[index] == 'R') r++;
                if (s[index] == 'G') g++;
                if (s[index] == 'B') b++;

            }



            //==========================================================================================================================
            //2) output
            long output = 0;


            //これでは、RGBに対してijkが決まらないため、全検索を行わないといけない O(N^3)
            //foreach (var r in rIndexes)
            //{
            //    foreach (var g in gIndexes)
            //    {
            //        foreach (var b in bIndexes)
            //        {
            //            List<int> holder = new List<int>() { r, g, b };
            //            var sorted = holder.OrderBy(v => v).ToList();

            //            if (sorted[1] - sorted[0] != sorted[2] - sorted[1])
            //            {
            //                output++;
            //            }
            //        }
            //    }
            //}


            //O(N^2)となるように考える
            //コツは、条件式の算出を下記パターンで考える
            //１）条件１、２を同時に満たす要素を求めるときのO(N)
            //２）条件１を満たす要素を求めるときのO(N)
            //３）条件２を満たす要素を求めるときのO(N)
            //これらを考えたとき、
            //１)と２）*３）どちらのオーダーが大きいか比較し、小さい方を採用するようにする

            //この場合、i,j固定で最後のKを確定するとき、その個数を導出するよう条件を設定する
            //以下回答

            //（１）
            output = r * g * b;
            for (int i = 0; i < n; i++)
            {
                //i<jより初期値は＋１
                for (int j = i + 1; j < n; j++)
                {
                    //満たす個数を見つける場合、条件１であるSi、Sj、Skの比較で実際に要素を比較するしかなくなり、総当たりしかなくなるのでNG

                    //ただしこの条件１の総数は事前にO(N)で算出可能（１）である
                    //また条件２を独立に考えたとき、i,jは決定され、j−i=k−jを満たすkが算出可能なことを考えると、総当たりしてもO(N^2)
                    //さらにijkが決定されているので条件１の確認も可能
                    //したがって条件１から、条件２のうち条件１を満たす個数を引いていくことでよい

                    //kの算出
                    int k = j + (j - i);

                    //この時点でkがnを超えてたらスキップでよい
                    if (k >= n)
                    {
                        continue;
                    }

                    //条件１を満たしているか
                    if (s[i] != s[j] && s[i] != s[k] && s[j] != s[k])
                    {
                        //条件２を満たさないが条件１を満たすため減算
                        output--;
                    }


                }
            }



            Console.WriteLine(output);

            //==========================================================================================================================

        }
    }
}


Measured memory_bytes: 27524