#include <bits/stdc++.h>

#define PI acos(-1)
#define all(a) a.begin(), a.end()
#define full(a, n) a, a + n
#define ma(type, size) (type *)malloc(sizeof(type) * size)
#define F first
#define S second
#define PB push_back
#define PPB pop_back
#define PF push_front
#define PPF pop_front
#define MP make_pair
#define MT make_tuple
#define f0(i, n) for (i = 0; i < (n); ++i)
#define f1(i, n) for (i = 1; i < (n); ++i)
#define f1n(i, n) for (i = 1; i <= (n); ++i)
#define fab(i, a, b) for (i = (a); i <= (b); ++i)
#define fr(i, b, a) for (i = (b); i >= (a); --i)
#define endl "\n"
#define sz size()
#define ln length()

using namespace std;

/*
#include <ext/pb_ds/assoc_container.hpp>
using namespace __gnu_pbds;
typedef tree<int,null_type,less<int>,rb_tree_tag,
	tree_order_statistics_node_update> indexed_set;
//*/
typedef long long int ll;
#define int long int

typedef vector<ll> vll;
typedef pair<ll, ll> pll;
//typedef tuple<ll, ll, ll> tll;
/*
set<ll> operator|(set<ll> s1, set<ll> s2) {
    set<ll> ret;
    set_union(s1.begin(), s1.end(), s2.begin(), s2.end(), ::inserter(ret,ret.begin()));
    return ret;
}
set<ll> operator&(set<ll> s1, set<ll> s2) {
    set<ll> ret;
    set_intersection(s1.begin(), s1.end(), s2.begin(), s2.end(), ::inserter(ret,ret.begin()));
    return ret;
}//*/


//* utility function
inline bool compare(ll i, ll j)
{
    return i < j;
}
//*/

//* function prototypes
template< typename T>
T gcd(T a, T b);
template< typename T>
T modpow(T number, T power, T mod_value);
void seive(ll maximum_number);
//*/

//int row, column;
//int dx[8] = {1, 1, 0, -1, -1, -1, 0, 1};
//int dy[8] = {0, -1, -1, -1, 0, 1, 1, 1};
//int dx[4] = {1,  0, -1, 0};
//int dy[4] = {0, -1,  0, 1};
//const ll p2[63] = {1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536, 131072, 262144, 524288, 1048576, 2097152, 4194304, 8388608, 16777216, 33554432, 67108864, 134217728, 268435456, 536870912, 1073741824, 2147483648, 4294967296, 8589934592, 17179869184, 34359738368, 68719476736, 137438953472, 274877906944, 549755813888, 1099511627776, 2199023255552, 4398046511104, 8796093022208, 17592186044416, 35184372088832, 70368744177664, 140737488355328, 281474976710656, 562949953421312, 1125899906842624, 2251799813685248, 4503599627370496, 9007199254740992, 18014398509481984, 36028797018963968, 72057594037927936, 144115188075855872, 288230376151711744, 576460752303423488, 1152921504606846976, 2305843009213693952, 4611686018427387904};

#ifdef DEBUG
#endif // DEBUG

const ll maxN = 5e3+10;
const ll maxB = 320;
const ll INF = 1e14;

bitset<//maxN
    +10>is_prime;
vll prime;

ll tri[maxN+10][130];
string color="RGB";

signed main()
{
    //ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    //freopen("input.txt", "r", stdin);
    //freopen("output.txt", "w", stdout);

    //seive(maxN);
    ll number_of_test_case = 1, test_case;
    //cin >> number_of_test_case;
    for (test_case = 1; test_case <= number_of_test_case; test_case++)
    {
    	//cout << "Test #" << test_case << ": ";
    	//cout << "Case " << test_case << ": ";
    	ll i, j, k, m, n, query, q; //ll a, b, x, y;

    	string s;

    	cin >> n >> s;

    	for (i = n-1; i >= 0; i--)
        {
            tri[i][s[i]] = 1;
        }

        ll ans = 0;

    	for (i = n-2; i >= 0; i--)
        {
            tri[i]['R'] += tri[i+1]['R'];
            tri[i]['G'] += tri[i+1]['G'];
            tri[i]['B'] += tri[i+1]['B'];
        }
        //cout << tri[0][color[0]] << " " << tri[0][color[1]] << " "<< tri[0][color[2]] << endl;

        for (i = 0; i < n; i++)
        {
            if (s[i] == color[0])
            {
                for (j = i+1; j < n; j++)
                {
                    if(s[j] == color[1])
                    {
                        ans += tri[j][color[2]];
                        if (j + j-i < n && s[j+j-i] == color[2])ans--;
                    }
                    else if(s[j] == color[2])
                    {
                        ans += tri[j][color[1]];
                        if (j + j-i < n && s[j+j-i] == color[1])ans--;
                    }
                }
            }
            else if (s[i] == color[1])
            {
                for (j = i+1; j < n; j++)
                {
                    if(s[j] == color[0])
                    {
                        ans += tri[j][color[2]];
                        if (j + j-i < n && s[j+j-i] == color[2])ans--;
                    }
                    else if(s[j] == color[2])
                    {
                        ans += tri[j][color[0]];
                        if (j + j-i < n && s[j+j-i] == color[0])ans--;
                    }
                }
            }
            else if (s[i] == color[2])
            {
                for (j = i+1; j < n; j++)
                {
                    if(s[j] == color[0])
                    {
                        ans += tri[j][color[1]];
                        if (j + j-i < n && s[j+j-i] == color[1])ans--;
                    }
                    else if(s[j] == color[1])
                    {
                        ans += tri[j][color[0]];
                        if (j + j-i < n && s[j+j-i] == color[0])ans--;
                    }
                }
            }
        }

        cout << ans << endl;
    }
    return 0;
}


template< typename T>
T gcd(T a, T b)
{
    if (b == 0)
        return a;
    return gcd(b, a%b);
}
template< typename T>
T modpow(T number, T power, T mod_value)
{
    if (power == 0)
        return 1%mod_value;
    ll u = modpow(number,power/2,mod_value);
    u = (u*u)%mod_value;
    if (power%2 == 1)
        u = (u*number)%mod_value;
    return u;
}
void seive(ll maximum_number)
{
    ll i, j;
    is_prime.set(); is_prime.reset(0); is_prime.reset(1);
    for (i = 2; i*i <= maximum_number; i++)
    {
        if (is_prime.test(i) == true)
        {
            prime.PB(i);
            for (j = i*i; j <= maximum_number; j += i)is_prime.reset(j);
        }
    }
    for(; i <= maximum_number; i++)if (is_prime.test(i) == true)prime.PB(i);
}


Measured memory_bytes: 7624