Topology below. Juniper vMX devices used as CE’s but you are free to use whatever you would like. BGP is used between PE’s & CE’s but you could use another protocol if you prefer. The MPLS core has an iBGP session between PE1 & PE2 but you could build BGP throughout and use Route Reflectors.
https://www.cisco.com/c/en/us/td/docs/ios_xr_sw/iosxr_r3-7/mpls/configuration/guide/gc37v3.html
PE1
hostname pe1
vrf cust1
address-family ipv4 unicast
import route-target 65400:1
export route-target 65400:1
interface Loopback0
ipv4 address 5.5.5.5 255.255.255.255
interface GigabitEthernet0/0/0/0
ipv4 address 1.1.1.1 255.255.255.252
interface GigabitEthernet0/0/0/1
vrf cust1
ipv4 address 10.1.1.1 255.255.255.252
route-policy ALL
pass
router isis 1
is-type level-2-only
net 49.0000.5555.5555.5555.00
address-family ipv4 unicast
interface Loopback0
address-family ipv4 unicast
interface GigabitEthernet0/0/0/0
address-family ipv4 unicast
router bgp 65400
address-family vpnv4 unicast
neighbor 9.9.9.9
remote-as 65400
update-source Loopback0
address-family vpnv4 unicast
vrf cust1
rd 5.5.5.5:1
address-family ipv4 unicast
redistribute connected
neighbor 10.1.1.2
remote-as 65500
update-source GigabitEthernet0/0/0/1
address-family ipv4 unicast
route-policy ALL in
route-policy ALL out
as-override
mpls ldp
interface GigabitEthernet0/0/0/0
P1
hostname p1
interface Loopback0
ipv4 address 6.6.6.6 255.255.255.255
interface GigabitEthernet0/0/0/0
ipv4 address 1.1.1.2 255.255.255.252
interface GigabitEthernet0/0/0/1
ipv4 address 2.2.2.1 255.255.255.252
router isis 1
is-type level-2-only
net 49.0000.6666.6666.6666.00
interface Loopback0
address-family ipv4 unicast
interface GigabitEthernet0/0/0/0
address-family ipv4 unicast
!
!
interface GigabitEthernet0/0/0/1
address-family ipv4 unicast
mpls ldp
interface GigabitEthernet0/0/0/0
interface GigabitEthernet0/0/0/1
P2
hostname p2
interface Loopback0
ipv4 address 7.7.7.7 255.255.255.255
interface GigabitEthernet0/0/0/0
ipv4 address 2.2.2.2 255.255.255.252
interface GigabitEthernet0/0/0/1
ipv4 address 3.3.3.1 255.255.255.252
router isis 1
is-type level-2-only
net 49.0000.7777.7777.7777.00
interface Loopback0
address-family ipv4 unicast
interface GigabitEthernet0/0/0/0
address-family ipv4 unicast
interface GigabitEthernet0/0/0/1
address-family ipv4 unicast
mpls ldp
interface GigabitEthernet0/0/0/0
interface GigabitEthernet0/0/0/1
P3
hostname p3
interface Loopback0
ipv4 address 8.8.8.8 255.255.255.255
interface GigabitEthernet0/0/0/0
ipv4 address 3.3.3.2 255.255.255.252
interface GigabitEthernet0/0/0/1
ipv4 address 4.4.4.1 255.255.255.252
router isis 1
is-type level-2-only
net 49.0000.8888.8888.8888.00
interface Loopback0
address-family ipv4 unicast
interface GigabitEthernet0/0/0/0
address-family ipv4 unicast
interface GigabitEthernet0/0/0/1
address-family ipv4 unicast
mpls ldp
interface GigabitEthernet0/0/0/0
interface GigabitEthernet0/0/0/1
PE2
hostname pe2
vrf cust1
address-family ipv4 unicast
import route-target 65400:1
export route-target 65400:1
interface Loopback0
ipv4 address 9.9.9.9 255.255.255.255
interface GigabitEthernet0/0/0/0
ipv4 address 4.4.4.2 255.255.255.252
interface GigabitEthernet0/0/0/1
vrf cust1
ipv4 address 10.10.10.1 255.255.255.252
route-policy ALL
pass
router isis 1
is-type level-2-only
net 49.0000.9999.9999.9999.00
interface Loopback0
address-family ipv4 unicast
interface GigabitEthernet0/0/0/0
address-family ipv4 unicast
router bgp 65400
address-family vpnv4 unicast
neighbor 5.5.5.5
remote-as 65400
update-source Loopback0
address-family vpnv4 unicast
vrf cust1
rd 9.9.9.9:1
address-family ipv4 unicast
redistribute connected
neighbor 10.10.10.2
remote-as 65500
update-source GigabitEthernet0/0/0/1
address-family ipv4 unicast
route-policy ALL in
route-policy ALL out
as-override
mpls ldp
interface GigabitEthernet0/0/0/0
Loopback addresses of 11.11.11.11 & 22.22.22.22 have been configured on PE1 & PE2 respectively and you can confirm connectivity through the MPLS core by pinging the loopback from the other PE.