#include <algorithm>     //sort,二分探索,など
#include <bitset>        //固定長bit集合
#include <cmath>         //pow,logなど
#include <complex>       //複素数
#include <deque>         //両端アクセスのキュー
#include <functional>    //sortのgreater
#include <iomanip>       //setprecision(浮動小数点の出力の誤差)
#include <iostream>      //入出力
#include <iterator>      //集合演算(積集合,和集合,差集合など)
#include <map>           //map(辞書)
#include <numeric>       //iota(整数列の生成),gcdとlcm(c++17)
#include <queue>         //キュー
#include <set>           //集合
#include <stack>         //スタック
#include <string>        //文字列
#include <unordered_map> //イテレータあるけど順序保持しないmap
#include <unordered_set> //イテレータあるけど順序保持しないset
#include <utility>       //pair
#include <vector>        //可変長配列

using namespace std;
typedef long long ll;
typedef pair< ll, ll > P;

//マクロ
#define REP(i, n) for (ll i = 0; i < (ll)(n); i++)
#define REPD(i, n) for (ll i = (ll)(n)-1; i >= 0; i--)
#define FOR(i, a, b) for (ll i = (a); i <= (b); i++)
#define FORD(i, a, b) for (ll i = (a); i >= (b); i--)
#define ALL(x) (x).begin(), (x).end() //sortなどの引数を省略したい
#define SIZE(x) ((ll)(x).size())      //sizeをsize_tからllに直しておく
#define MAX(x) *max_element(ALL(x))
#define INF 1000000000000 //10^12
#define MOD 1000000007    //10^9+7
#define PB push_back
#define MP make_pair
#define F first
#define S second
#define MAXR 100000 //10^5:最大のrange(素数列挙などで使用)

// debug
#define DEBUG(x) cout << #x << ": " << x << endl
#define DEBUG2(x, y) cout << #x << ": " << x << " " << #y << ": " << y << endl
#define DEBUG_VEC(v)   \
  cout << #v << ":";   \
  REP(i, v.size())     \
  cout << " " << v[i]; \
  cout << endl
#define DEBUG_ARR(v, n) \
  cout << #v << ":";    \
  REP(i, n)             \
  cout << " " << v[i];  \
  cout << endl

signed main()
{
  ll N;
  cin >> N;
  string S;
  cin >> S;

  // R→0, G→1, B→2 で、文字が存在するか
  vector< vector< bool > > d(3, vector< bool >(N, false));
  // 何個目かを記憶する
  vector< ll > dsize(3, 0);
  vector< vector< ll > > dm(3, vector< ll >(N, -1));

  REP(i, N)
  {
    char c = S[i];
    ll id = -1;
    if (c == 'R')
    {
      id = 0;
    }
    else if (c == 'G')
    {
      id = 1;
    }
    else if (c == 'B')
    {
      id = 2;
    }

    dsize[id]++;
    d[id][i] = true;
    for (ll col = 0; col < 3; col++)
    {
      dm[col][i] = dsize[col];
    }
  }

  // DEBUG_VEC(dsize);
  // FOR(col, 0, 2)
  // {
  //   DEBUG_VEC(dm[col]);
  // }

  ll ans = 0;
  for (ll id = 0; id < 3; id++)
  {
    for (ll d1 = 0; d1 < N - 2; d1++)
    {
      if (!d[id % 3][d1])
      {
        continue;
      }
      for (ll d2 = d1 + 1; d2 < N - 1; d2++)
      {
        if (!d[(id + 1) % 3][d2])
        {
          continue;
        }
        ll d3 = d2 + 1;
        ll d3size = dsize[(id + 2) % 3] - dm[(id + 2) % 3][d3];
        if (d[(id + 2) % 3][d3])
        {
          d3size += 1;
        }
        ll k = 2 * d2 - d1;
        if (k < N && d[(id + 2) % 3][k])
        {
          d3size -= 1;
        }
        ans += d3size;
      }

      for (ll d2 = d1 + 1; d2 < N - 1; d2++)
      {
        if (!d[(id + 2) % 3][d2])
        {
          continue;
        }
        ll d3 = d2 + 1;
        ll d3size = dsize[(id + 1) % 3] - dm[(id + 1) % 3][d3];
        if (d[(id + 1) % 3][d3])
        {
          d3size += 1;
        }
        ll k = 2 * d2 - d1;
        if (k < N && d[(id + 1) % 3][k])
        {
          d3size -= 1;
        }
        ans += d3size;
      }
    }
  }

  cout << ans << endl;

  return 0;
}


Measured memory_bytes: 3664