#include <stdio.h>
#include <math.h>

const MAXN = 2000;
const MAXM = 1000;

struct Triangle
{
	long x;
	long y;
	int m;
};

int n;
Triangle triangles[MAXN];
long event[MAXN+1];
double area;
double triangleArea[MAXM+1];

void readInput()
{
	FILE *in = fopen("tr.in","rt");
	fscanf(in,"%d",&n);
	for (int i = 0; i < n; i++)
	{
		fscanf(in,"%ld %ld %d",&triangles[i].x,&triangles[i].y,&triangles[i].m);
	}
	fclose(in);
}

void sortTriangles()
{
	for (int i = 0; i < n; i++)
	{
		for (int j = i+1; j < n; j++)
		{
			if (triangles[i].y > triangles[j].y)
			{
				Triangle temp = triangles[i];
				triangles[i] = triangles[j];
				triangles[j] = temp;
			}
		}
	}
}

void getEvents()
{
	for (int i = 0; i < n; i++)
	{
		event[i] = triangles[i].x;
	}

	event[n] = 100000000; // 10^8 - last event

	for (i = 0; i <= n; i++)
	{
		for (int j = i+1; j <= n; j++)
		{
			if (event[i] > event[j])
			{
				long temp = event[i];
				event[i] = event[j];
				event[j] = temp;
			}
		}
	}
}

double trapecesArea(long x1,long x2,long x3)
{
	if (x3 <= x2) return (triangleArea[x3-x1]);

	return (triangleArea[x3-x1]-triangleArea[x3-x2]);
}

void calcUnionArea()
{
	area = 0;

	for (int i = 1; i <= n; i++)
	{
		if (event[i] > event[i-1])
		{
			long prevX = event[i-1];
			long prevY = 0; // nav svariigi

			for (int j = 0; j < n; j++)
			{
				if (triangles[j].x <= event[i-1] &&
					triangles[j].x+triangles[j].m > event[i-1])
				{
					if (prevX > event[i-1])
					{
						prevX -= triangles[j].y-prevY;
						prevY = triangles[j].y;
					}

					if (triangles[j].x+triangles[j].m > prevX)
					{
						area += trapecesArea(event[i-1],event[i],
							triangles[j].x+triangles[j].m);

						if (prevX > event[i-1])
						{
							area -= trapecesArea(event[i-1],event[i],prevX);
						}

						prevX = triangles[j].x+triangles[j].m;
						prevY = triangles[j].y;
					}
				}
			}
		}
	}
}

void writeOutput()
{
	FILE *out = fopen("tr.out","wt");
	long result2 = floor(area*2+0.50);

	if (result2 % 2 == 0)
	{
		fprintf(out,"%ld\n",result2 / 2);
	}
	else
	{
		fprintf(out,"%ld.5\n",result2 / 2);
	}

	fclose(out);
}

void calcTriangleArea()
{
	for (long i = 0; i <= MAXM; i++)
	{
		triangleArea[i] = double(i*i)/2;
	}
}

void main()
{
	readInput();
	sortTriangles();
	getEvents();
	calcTriangleArea();
	calcUnionArea();
	writeOutput();
}